附加到 Python 中的列表:每次都添加最后一个元素?
Posted
技术标签:
【中文标题】附加到 Python 中的列表:每次都添加最后一个元素?【英文标题】:Appending to a list in Python: adds last element every time? 【发布时间】:2015-11-10 12:42:11 【问题描述】:我想将 dict 附加到列表中,但得到的结果不是我想要的。
我的代码:
records=[]
record=
for i in range(0,2):
record['a']=i
for j in range (0,2):
record['b']=j
records.append(record)
print records
我预计:
['a': 0, 'b': 0, 'a': 0, 'b': 1, 'a': 1, 'b': 0, 'a': 1, 'b': 1]
我得到了:
['a': 1, 'b': 1, 'a': 1, 'b': 1, 'a': 1, 'b': 1, 'a': 1, 'b': 1]
为什么每次只添加最后一个元素?
【问题讨论】:
【参考方案1】:您正在重复使用和添加一个字典。如果您想要单独的字典,请每次附加一个副本:
records = []
record =
for i in range(2):
record['a'] = i
for j in range(2):
record['b'] = j
records.append(record.copy())
或者每次都新建一个字典:
records = []
for i in range(2):
for j in range(2):
record = 'a': i, 'b': j
records.append(record)
后一种方法适用于翻译成列表理解:
records = ['a': i, 'b': j for i in range(2) for j in range(2)]
【讨论】:
【参考方案2】:record.copy()
如果您嵌套了字典,它将不起作用,因为它返回浅拷贝。请改用deepcopy
,这是完全证明。
from copy import deepcopy
records.append(deepcopy(record))
【讨论】:
以上是关于附加到 Python 中的列表:每次都添加最后一个元素?的主要内容,如果未能解决你的问题,请参考以下文章