사전을 입력으로 받고 키가 입력 값이되고 값이 해당 입력 키가되는 사전을 반환하고 싶습니다. 값은 고유합니다.
예를 들어, 내 입력은 다음과 같습니다.
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}
다음과 같은 경우 사전을 ‘반전’할 수 없습니다.
- 둘 이상의 키가 동일한 값을 공유합니다. 예를 들면
{'one':1,'two':1}
. 새 사전에는 키가있는 항목이 하나만있을 수 있습니다1
. - 하나 이상의 값은 해시 할 수 없습니다. 예를 들면
{'one':[1]}
.[1]
은 유효한 값이지만 유효한 키가 아닙니다.
주제에 대한 토론은 파이썬 메일 링리스트 에서이 스레드 를 참조하십시오 .
답변
res = dict(zip(a.values(), a.keys()))