1

可能重复:
Python 反向/反向映射

说我有以下。

D = {'a':1,'b':2,'c':3}

我将如何反转每个元素,所以我得到

inverseD = {1:'a',2:'b',3'c'}
4

3 回答 3

7

使用 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'}
于 2012-05-24T01:05:46.657 回答
3

对于 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'}
于 2012-05-24T01:07:54.057 回答
3

如果你有 Python2.7+,你可以使用 mata 的答案,否则使用 mhawke 的答案。

仅当源 dict 的所有值都是唯一且可散列的时,像这样反转 dict 才能正常工作

如果这些值是可散列的,但不是唯一的,您可以使用具有值列表的字典来代替

于 2012-05-24T01:12:22.913 回答