【问题标题】:Create many empty dictionary in Python在 Python 中创建许多空字典
【发布时间】:2015-12-22 09:31:37
【问题描述】:

我正在尝试在 Python 2.7 的 for 循环中创建许多字典。我有一个清单如下:

sections = ['main', 'errdict', 'excdict']

我想访问这些变量,并使用变量名创建新字典。我只能访问列表部分并将空字典存储在列表中,但不能存储在相应的变量中。

for i in enumerate(sections):
    sections[i] = dict()

这个问题的重点是。我将从 .ini 文件中获取列表部分,并且该变量会有所不同。而且我可以创建一个字典数组,但是对于进一步的功能要求来说,这并不能很好地工作。因此,我的怀疑。

【问题讨论】:

  • enumerate(sections) 返回来自 (i, sec) 的元组。然后你尝试用一个元组索引到列表中。这应该失败。
  • 您必须在引用它们之前分配这些变量。
  • 总的来说,我不明白你有什么,你想做什么,你想得到什么。
  • 看起来你想要类似:sections = [dict() for ii in range(len(sections))]
  • 名称main,errdict,excdict是否已经是变量或字符串?

标签: python for-loop dictionary


【解决方案1】:

Robin Spiess 很好地回答了您的问题。

我只想添加单行方式:

section_dict = {sec : {} for sec in sections}

为了保持插入顺序,您需要一个OrderedDict

from collections import OrderedDict
section_dict = OrderedDict((sec, {}) for sec in sections)

【讨论】:

  • 在尝试此插入时,section_dict 似乎与列表部分的顺序相反。我尝试了以下方法,但没有成功:sorted(section_dict.items())这显然没有解决我的目的sorted(section_dict.iteritems())此方法以相反的顺序对字典进行排序,与错误插入顺序相同跨度>
  • @ParisaRai,我向你保证,这些项目是以正确的顺序插入的,但是 python 字典是一个 无序 数据结构。如果您需要保持插入顺序而不是查看collections 模块
【解决方案2】:

清除字典

如果列表中的变量已经是字典,请使用:

for var in sections:
  var.clear()

注意这里var = {}不起作用,见Difference between dict.clear() and assigning {} in Python

创建新词典

只要你只有几个字典,最好的方法可能是最简单的:

main = {} #same meaning as main = dict() but slightly faster
errdict = {}
excdict = {}
sections = [main,errdict,excdict]

需要先声明变量,然后才能将它们放入列表中。

对于更多的听写,我支持@dslack 在 cmets 中的回答(全归功于他):

sections = [dict() for _ in range(numberOfDictsYouWant)] 

如果您希望能够按名称访问字典,最简单的方法是制作字典字典:

sectionsdict = {}
for var in sections:
   sectionsdict[var] = {}

您可能还感兴趣:Using a string variable as a variable name

【讨论】:

  • @StoryTeller 它没有被使用,但是我怎样才能在没有变量循环的情况下创建一个 for 循环呢?另一种方法是使用for _ in range(),但这并没有太大区别。
  • 有很大的不同,后者比较地道,以至于pylint都能理解。但是,如果您对它有时可能会带来的问题感到不满,那么不要使用 unused_* 的另一个成语来处理一次性变量。
  • @StoryTeller 已更改答案,感谢您的意见。
  • 有点可怜 main = {} 和 main = dict() 并不完全相同。如果您拆卸它们,您会发现它们之间存在细微的差异。据我所知,主要区别在于 dict() 是内置的,它们在创建时保留内存方面不同
  • @StefanReinhardt 没错,我也读过,在某些 python 版本中,使用 {} 似乎比 dict() 快 6 倍。
猜你喜欢
  • 1970-01-01
  • 2019-08-07
  • 2023-03-15
  • 2016-07-11
  • 1970-01-01
  • 2018-11-01
  • 2013-01-29
  • 1970-01-01
  • 2021-06-25
相关资源
最近更新 更多