将字典附加到循环中的列表
Posted
技术标签:
【中文标题】将字典附加到循环中的列表【英文标题】:Appending a dictionary to a list in a loop 【发布时间】:2014-07-06 14:38:21 【问题描述】:我正在尝试获取字典并将其附加到列表中。然后字典更改值,然后在循环中再次附加。似乎每次我这样做时,列表中的所有字典都会更改其值以匹配刚刚附加的字典。
例如:
>>> dict =
>>> list = []
>>> for x in range(0,100):
... dict[1] = x
... list.append(dict)
...
>>> print list
我假设结果是[1:1, 1:2, 1:3... 1:98, 1:99]
,但我得到了:
[1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99, 1: 99]
【问题讨论】:
你在填写list
(你不应该将其命名为list
)引用相同的dict
(你不应将其命名为dict
)
【参考方案1】:
你需要附加一个副本,否则你只是一遍又一遍地添加对同一个字典的引用:
yourlist.append(yourdict.copy())
我用yourdict
和yourlist
代替dict
和list
;你不想屏蔽内置类型。
【讨论】:
【参考方案2】:当您在循环之外创建 adict
字典时,您会将相同的字典附加到您的 alist
列表中。这意味着所有副本都指向同一个字典,并且您每次都获得最后一个值1:99
。只需在循环中创建每个字典,现在您就有了 100 个不同的字典。
alist = []
for x in range(100):
adict = 1:x
alist.append(adict)
print(alist)
【讨论】:
【参考方案3】:只需将dict =
放入循环中即可。
>>> dict =
>>> list = []
>>> for x in range(0, 100):
dict[1] = x
list.append(dict)
dict =
>>> print list
【讨论】:
【参考方案4】:您还可以使用zip
和列表推导来做您需要的事情。
如果您希望 dict 值从一次开始使用 range(1,100)
l = [dict(zip([1],[x])) for x in range(1,100)]
【讨论】:
【参考方案5】:假设d
是您的字典。在这里,如果你这样做d.copy()
。当您将字典嵌套到 d
字典中时,它会返回不起作用的浅表副本。为了克服这个问题,我们必须使用 deepcopy。
from copy import deepcopy
list.append(deepcopy(d))
效果很好!!!
【讨论】:
以上是关于将字典附加到循环中的列表的主要内容,如果未能解决你的问题,请参考以下文章