2012-04-24 34 views

回答

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,在列表中r产量{'k': 2}d两个引用。

如果你想要它不同,你必须创建一个新的字典每次通过循环。

1

你几乎在那里。这需要只是一个小补丁:

l = [1, 2] 
r = [] 

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

print r 

至于回味无穷,这里是一个比较先进的方式使用list comprehension做到这一点:

>>> [{'k': el} for el in [1, 2]] 
[{'k': 1}, {'k': 2}]