可能重复:
Python 反向/反向映射
说我有以下。
D = {'a':1,'b':2,'c':3}
我将如何反转每个元素,所以我得到
inverseD = {1:'a',2:'b',3'c'}
使用 dict 理解(Python2.7+
和3.0+
):
D = {'a':1,'b':2,'c':3}
inverse = {v: k for k, v in D.items()}
print(inverse)
# {1: 'a', 2: 'b', 3: 'c'}
对于 Python 2.6 及更早版本(无字典理解):
d = {'a':1,'b':2,'c':3}
inverse_dict = dict((v,k) for k,v in d.items())
这假设 dict 的值是d
可散列的,例如,它不适用于此字典:
>>> d={'l':[],'d':{},'t':()}
>>> inverse_dict = dict((v,k) for k,v in d.items())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
如果原始 dict 的值不是唯一的,您也会遇到问题,例如
>>> d={'a': 1, 'c': 3, 'b': 2, 'd': 1}
>>> dict((v,k) for k,v in d.items())
{1: 'd', 2: 'b', 3: 'c'}
如果你有 Python2.7+,你可以使用 mata 的答案,否则使用 mhawke 的答案。
仅当源 dict 的所有值都是唯一且可散列的时,像这样反转 dict 才能正常工作
如果这些值是可散列的,但不是唯一的,您可以使用具有值列表的字典来代替