循环期间字典中的值

时间:2013-03-15 19:14:13

标签: python list loops dictionary

在字典中循环时,如何更改循环中的值。 例如:

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

我想做:

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

但这不起作用。发生的是第i个值最终成为最后一个。在我的新词典中,所以总是a:2,c:2等,而不是a:1, b:4, q:2。我需要存储我认为的第i个值,然后使用它来更改字典中的值。虽然我不确定我得到了什么!任何帮助,将不胜感激!

2 个答案:

答案 0 :(得分:1)

dicts中的键未订购。因此,您无法控制listt中的项目与dict 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)])

答案 1 :(得分:0)

这里与dict的误解很少:

似乎你想用相同的键和新值(使用新列表提供的值)'更新'dictonary。问题是,dictonary没有按顺序保存存储的项目;字典{a:d, c:b, q:r}并不意味着您可以按[a, c, q]顺序遍历字典。

另外,你正在使用嵌套的for循环,这就是为什么每个值最终成为listt的最后一个线索。

你可以使用collections.OrderedDict来保持秩序。并且,使用zip来组合迭代器,而不是嵌套的for循环。

所以,你的代码是:

from collections import OrderedDict

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

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