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

Kik*_*kas 3 python list append

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

我的代码:

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 
Run Code Online (Sandbox Code Playgroud)

我期望:

[{'a': 0, 'b': 0}, {'a': 0, 'b': 1}, {'a': 1, 'b': 0}, {'a': 1, 'b': 1}]
Run Code Online (Sandbox Code Playgroud)

我改为:

[{'a': 1, 'b': 1}, {'a': 1, 'b': 1}, {'a': 1, 'b': 1}, {'a': 1, 'b': 1}]
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 10

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

records = []
record = {}
for i in range(2):
    record['a'] = i  
    for j in range(2):
        record['b'] = j
        records.append(record.copy())
Run Code Online (Sandbox Code Playgroud)

或者每次都创建一个新词典:

records = []
for i in range(2):
    for j in range(2):
        record = {'a': i, 'b': j}
        records.append(record)
Run Code Online (Sandbox Code Playgroud)

后一种方法有助于翻译成列表理解:

records = [{'a': i, 'b': j} for i in range(2) for j in range(2)]
Run Code Online (Sandbox Code Playgroud)