将字典附加到循环中的列表

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())

我用yourdictyourlist代替dictlist;你不想屏蔽内置类型。

【讨论】:

【参考方案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))

效果很好!!!

【讨论】:

以上是关于将字典附加到循环中的列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用while循环时将值附加到字典中的列表?

将值附加到字典中的一个列表 将值附加到字典中的所有列表

如何将字符串附加到字典中的列表

Python:将 a 附加到字典中的列表

添加将字典附加到另一个 multiprocessing.managers.DictProxy 中的列表

用循环附加到字典