在字典中循环时,如何更改循环中的值。 例如:
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个值,然后使用它来更改字典中的值。虽然我不确定我得到了什么!任何帮助,将不胜感激!
答案 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))