2013-03-15 114 views
0

在字典中循環時,如何更改循環中的值。 例如:循環中的字典中的值

listt=[1,4,2] 
mydict=[a:d, c:b, q:r] 

我試圖讓:

for i in listt: 
    for key in mydict: 
      mydict[key]=i 

但這不起作用。發生的是第i個值最後成爲最後一個值。在我的新字典中,所以它始終是:2,c:2等,而不是a:1, b:4, q:2。我需要存儲我認爲的第i個值,然後使用它來更改字典中的值。雖然我不知道我在做什麼!任何幫助,將不勝感激!

回答

1

字符串中的鍵未被排序。因此,您無法控制listt中的項目與字典mydict中的鍵之間的配對。

然而,在OrderedDict鍵是下令:

import collections 

listt=[1,4,2] 
mydict=collections.OrderedDict([('a','d'), ('c','b'), ('q','r')]) 
for item, key in zip(listt, mydict): 
    mydict[key] = item 

print(mydict)  

產量

OrderedDict([('a', 1), ('c', 4), ('q', 2)]) 
0

有與dict這裏幾個誤區:

好像要'用相同的鍵和新值更新'dictonary(使用新列表提供的值)。問題是,dictonary不會保持存儲的項目順序;字典{a:d, c:b, q:r}並不意味着您可以通過[a, c, q]順序遍歷字典。

此外,您正在使用嵌套的for-loops,這就是爲什麼每個值都最終成爲listt的最後一個線索。

您可以使用collections.OrderedDict來保持順序。而不是嵌套for循環,請使用zip來組合迭代器。

所以,你的代碼將是:

from collections import OrderedDict 

listt = [1, 4, 2] 
mydict = OrderedDict([(a, d), (c, b), (q, r)]) 

mydict = OrderedDict(zip(mydict.keys(), listt))