在Python中追加到列表:每次都添加最后一个元素?

问题描述 投票:0回答:3

我想将一个字典附加到列表中,但我得到的结果不是我想要的。

我的代码:

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}]

为什么每次都只添加最后一个元素?

python list append
3个回答
13
投票

您正在重用并添加一个字典。如果您想要单独的词典,请每次附加一个副本:

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

1
投票
如果您嵌套了字典,

record.copy()
将不起作用,因为它返回浅副本。使用
deepcopy
来代替,这就是充分的证明。

from copy import deepcopy
records.append(deepcopy(record))

0
投票

我遇到了这个问题并且

records.append(deepcopy(record))
工作正常

© www.soinside.com 2019 - 2024. All rights reserved.