[python] 사전의 값으로 키를 어떻게 교환합니까?

사전을 입력으로 받고 키가 입력 값이되고 값이 해당 입력 키가되는 사전을 반환하고 싶습니다. 값은 고유합니다.

예를 들어, 내 입력은 다음과 같습니다.

a = dict()
a['one']=1
a['two']=2

내 출력은 다음과 같습니다.

{1: 'one', 2: 'two'}

명확히하기 위해 내 결과가 다음과 동일하기를 바랍니다.

res = dict()
res[1] = 'one'
res[2] = 'two'

이것을 달성하는 깔끔한 Pythonic 방법이 있습니까?



답변

파이썬 2 :

res = dict((v,k) for k,v in a.iteritems())

Python 3 (@erik에게 감사) :

res = dict((v,k) for k,v in a.items())


답변

new_dict = dict(zip(my_dict.values(), my_dict.keys()))


답변

3.0 이상을 포함하여 Python 2.7부터는 더 짧고 읽기 쉬운 버전이 있습니다.

>>> my_dict = {'x':1, 'y':2, 'z':3}
>>> {v: k for k, v in my_dict.items()}
{1: 'x', 2: 'y', 3: 'z'}


답변

In [1]: my_dict = {'x':1, 'y':2, 'z':3}

In [2]: dict((value, key) for key, value in my_dict.iteritems())
Out[2]: {1: 'x', 2: 'y', 3: 'z'}


답변

dict comprehensions를 사용할 수 있습니다 .

res = {v: k for k, v in a.iteritems()}

편집 됨 : Python 3 a.items()의 경우 a.iteritems(). 그들 사이의 차이점에 대한 토론은 Python의 iteritems on SO 에서 찾을 수 있습니다 .


답변

시도해 볼 수 있습니다.

d={'one':1,'two':2}
d2=dict((value,key) for key,value in d.iteritems())
d2
  {'two': 2, 'one': 1}

다음과 같은 경우 사전을 ‘반전’할 수 없습니다.

  1. 둘 이상의 키가 동일한 값을 공유합니다. 예를 들면 {'one':1,'two':1}. 새 사전에는 키가있는 항목이 하나만있을 수 있습니다 1.
  2. 하나 이상의 값은 해시 할 수 없습니다. 예를 들면 {'one':[1]}. [1]은 유효한 값이지만 유효한 키가 아닙니다.

주제에 대한 토론은 파이썬 메일 링리스트 에서이 스레드 를 참조하십시오 .


답변

res = dict(zip(a.values(), a.keys()))