如下所示,为什么最终的 r 不打印[{'k': 1}, {'k': 2}]?
l = [1, 2]
d = {}
r = []
for el in l:
    d['k'] = el
    print '> ' + str(d)
    r.append(d)
print r  
输出:
> {'k': 1}
> {'k': 2}
[{'k': 2}, {'k': 2}]
它在附加操作之前按要求打印,但是在将字典附加到列表之后,为什么它会重复附加最后一个元素?
如下所示,为什么最终的 r 不打印[{'k': 1}, {'k': 2}]?
l = [1, 2]
d = {}
r = []
for el in l:
    d['k'] = el
    print '> ' + str(d)
    r.append(d)
print r  
输出:
> {'k': 1}
> {'k': 2}
[{'k': 2}, {'k': 2}]
它在附加操作之前按要求打印,但是在将字典附加到列表之后,为什么它会重复附加最后一个元素?
当您第二次通过循环时,您正在为同一个键分配一个新值。
for el in l:
    d['k'] = el
    print '> ' + str(d)
    r.append(d)
print r  
第一次通过循环,el是1。d['k']设置为1,然后打印。然后d附加到r.
第二次通过循环,el是2。d['k']- 同一个字典的同一个键的同一个值 - 设置为2。然后将同一个字典 ,d附加到r。
现在r就像你说的一样
r = [d, d]
从d['k']现在开始,列表中的2两个引用都产生了。dr{'k': 2}
如果您希望它有所不同,则每次循环都必须创建一个新字典。
你快到了。这只需要一个小修复:
l = [1, 2]
r = []
for el in l:
    d = {}
    d['k'] = el
    print '> ' + str(d)
    r.append(d)
print r 
作为思考的食物,这里有一个更高级的方法来使用列表理解:
>>> [{'k': el} for el in [1, 2]]
[{'k': 1}, {'k': 2}]