[英]Adding results from a for loop to a dictionary , and then appending to a list
[英]Appending a dictionary to a list in a loop
我正在嘗試使用字典並將其附加到列表中。 然后字典更改值,然后在循環中再次附加。 似乎每次我這樣做時,列表中的所有字典都會更改它們的值以匹配剛剛附加的值。
例如:
>>> 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}]
您需要附加一個副本,否則您只是一遍又一遍地添加對同一個字典的引用:
yourlist.append(yourdict.copy())
我使用yourdict
和yourlist
而不是dict
和list
; 您不想屏蔽內置類型。
當您在循環之外創建adict
字典時,您將相同的 dict 附加到您的alist
列表中。 這意味着所有副本都指向同一個字典,並且每次都獲得最后一個值{1:99}
。 只需在循環中創建每個字典,現在您就有了 100 個不同的字典。
alist = []
for x in range(100):
adict = {1:x}
alist.append(adict)
print(alist)
只需將dict = {}
放入循環中。
>>> dict = {}
>>> list = []
>>> for x in range(0, 100):
dict[1] = x
list.append(dict)
dict = {}
>>> print list
您還可以使用zip
和列表理解來完成您需要的操作。
如果您希望 dict 值從一個使用range(1,100)
l = [dict(zip([1],[x])) for x in range(1,100)]
假設d
是您的字典。 在這里,如果您執行d.copy()
。 當您將字典嵌套到d
字典中時,它返回不起作用的淺拷貝。 為了克服這個問題,我們必須使用deepcopy 。
from copy import deepcopy
list.append(deepcopy(d))
它完美地工作!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.