0

如下所示,为什么最终的 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}]

它在附加操作之前按要求打印,但是在将字典附加到列表之后,为什么它会重复附加最后一个元素?

4

2 回答 2

3

当您第二次通过循环时,您正在为同一个键分配一个新值。

for el in l:
    d['k'] = el
    print '> ' + str(d)
    r.append(d)

print r  

第一次通过循环,el1d['k']设置为1,然后打印。然后d附加到r.

第二次通过循环,el2d['k']- 同一个字典的同一个键的同一个值 - 设置为2。然后将同一个字典 ,d附加到r

现在r就像你说的一样

r = [d, d]

d['k']现在开始,列表中的2两个引用都产生了。dr{'k': 2}

如果您希望它有所不同,则每次循环都必须创建一个新字典。

于 2012-04-24T03:58:05.953 回答
0

你快到了。这只需要一个小修复:

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}]
于 2012-04-24T04:17:58.963 回答