我在Python 2.7中有以下词典
dict1 = {'a':0, 'b':1, 'c':2,'d':3,'e':4,'f':5}
dict2 = {'a':3, 'b':4, 'c':5}
我想迭代dict2中的值,并用与dict1中的那些值对应的键替换它们,最后的字典是
dict3 = {'a':'d','b':'e','c':'f'}
我正在尝试学习编程,花了3个多小时尝试不同的方式并搜索互联网。任何帮助将不胜感激。
答案 0 :(得分:5)
>>> dict1 = {'a':0, 'b':1, 'c':2,'d':3,'e':4,'f':5}
>>> dict2 = {'a':3, 'b':4, 'c':5}
>>> d1 = {v:k for k,v in dict1.iteritems()}
>>> d1
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f'}
>>> dict3 = {k:d1[v] for k,v in dict2.iteritems()}
>>> dict3
{'a': 'd', 'c': 'f', 'b': 'e'}
答案 1 :(得分:2)
如果dict1
中有不同的整数,您可以从dict1
创建value->关键词典,然后使用它来查找来自dict1
dict2
的相应键:
>>> dict1_inverse = dict((v,k) for (k,v) in dict1.iteritems())
>>> dict((k, dict1_inverse[v]) for k,v in dict2.iteritems())
{'a': 'd', 'c': 'f', 'b': 'e'}
但是如果同一整数的dict1
映射中有多个键,那么你可能得不到你想要的,例如:
>>> dict1 = {'a':0, 'b':1, 'c':4,'d':3,'e':4,'f':5}
>>> dict1_inverse = dict((v,k) for (k,v) in dict1.iteritems())
>>> dict((k, dict1_inverse[v]) for k,v in dict2.iteritems())
{'a': 'd', 'c': 'f', 'b': 'e'}
此处b
可以映射到c
或e
,结果可能会有所不同,具体取决于哈希表中这些键在dict1
中的位置。< / p>
在这种情况下,您可能需要以下内容:
>>> dict1 = {'a':0, 'b':1, 'c':4,'d':3,'e':4,'f':5}
>>> dict1_inverse = {}
>>> for k,v in dict1.iteritems():
dict1_inverse.setdefault(v, []).append(k)
>>> dict1_inverse
{0: ['a'], 1: ['b'], 3: ['d'], 4: ['c', 'e'], 5: ['f']}
>>> dict((k, dict1_inverse[v]) for k,v in dict2.iteritems())
{'a': ['d'], 'c': ['f'], 'b': ['c', 'e']}
答案 2 :(得分:0)
>>> d1
{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'f': 5}
>>> d2
{'a': 3, 'c': 5, 'b': 4}
>>> d3 = {k:k2 for k2,v2 in d1.iteritems() for k,v in d2.iteritems() if v==v2}
>>> d3
{'a': 'd', 'c': 'f', 'b': 'e'}
答案 3 :(得分:0)
dict3={}
for k,v in dict2.items():
dict3[k]=sorted(dict1.keys())[v]