附加到 Python 中的列表:每次都添加最后一个元素?
Appending to a list in Python: adds last element every time?
我想将字典附加到列表,但得到的结果不是我想要的。
我的代码:
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}]
为什么每次只加最后一个元素?
您正在重复使用和添加一个词典。如果你想要单独的词典,每次都附加一个副本:
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)]
如果你嵌套了字典,record.copy()
将不起作用,因为它 returns 浅拷贝。使用 deepcopy
代替,这是完全证明。
from copy import deepcopy
records.append(deepcopy(record))
我想将字典附加到列表,但得到的结果不是我想要的。
我的代码:
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}]
为什么每次只加最后一个元素?
您正在重复使用和添加一个词典。如果你想要单独的词典,每次都附加一个副本:
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)]
record.copy()
将不起作用,因为它 returns 浅拷贝。使用 deepcopy
代替,这是完全证明。
from copy import deepcopy
records.append(deepcopy(record))