簡體   English   中英

將字典附加到循環中的列表

[英]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())

我使用yourdictyourlist而不是dictlist 您不想屏蔽內置類型。

當您在循環之外創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM