用另一个字典中的键替换字典的值

时间:2013-12-28 18:13:50

标签: python python-2.7 dictionary

我在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个多小时尝试不同的方式并搜索互联网。任何帮助将不胜感激。

4 个答案:

答案 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可以映射到ce,结果可能会有所不同,具体取决于哈希表中这些键在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]