programing

사전의 값과 키를 교환하려면 어떻게 해야 합니까?

subpage 2023. 7. 18. 21:45
반응형

사전의 값과 키를 교환하려면 어떻게 해야 합니까?

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

예를 들어, 다음과 같이 입력합니다.

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

다음과 같이 출력했으면 합니다.

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

명확하게 하기 위해 제 결과가 다음과 같았으면 합니다.

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

이것을 달성할 수 있는 깔끔한 파이썬 방법이 있습니까?

파이썬 2:

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

파이썬 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'}

딕트 이해를 사용할 수 있습니다.

파이썬 3

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

파이썬 2

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

3의 편됨: 파의썬 3경사를 합니다.a.items()a.iteritems()이들 간의 차이점에 대한 논의는 SO의 Python에 있는 항목에서 확인할 수 있습니다.

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

파이썬 3

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

파이썬 2

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

현재 선행 답변에서는 값이 항상 그렇지는 않은 고유한 것으로 가정합니다.값이 고유하지 않으면 어떻게 합니까?정보가 유출됩니다!예:

d = {'a':3, 'b': 2, 'c': 2} 
{v:k for k,v in d.iteritems()} 

아온다를 합니다.{2: 'b', 3: 'a'}.

에 대한 입니다.'c'완전히 무시당했습니다.이상적으로는 다음과 같은 것이어야 합니다.{2: ['b','c'], 3: ['a']}이것이 바로 하부 구현이 수행하는 작업입니다.

파이썬 2.x

def reverse_non_unique_mapping(d):
    dinv = {}
    for k, v in d.iteritems():
        if v in dinv:
            dinv[v].append(k)
        else:
            dinv[v] = [k]
    return dinv

파이썬 3.x

def reverse_non_unique_mapping(d):
    dinv = {}
    for k, v in d.items():
        if v in dinv:
            dinv[v].append(k)
        else:
            dinv[v] = [k]
    return dinv

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

시도해 볼 수 있습니다.

파이썬 3

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

파이썬 2

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]유효한 값이지만 유효한 키가 아닙니다.

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

new_dict = dict( (my_dict[k], k) for k in my_dict)

Python 3에서만 작동합니다.

new_dict = { my_dict[k]: k for k in my_dict}

Ilya Prokin의 응답을 확장하는 또 다른 방법은 실제로 사용하는 것입니다.reversed기능.

dict(map(reversed, my_dict.items()))

)로 됩니다..items()각이며, 항목은 "" "/" "" " " " "로 .reversed기능다. 이음으전때달 때.dict생성자가 원하는 값/키 쌍으로 변환합니다.

하비에르의 답변에 대한 개선 제안:

dict(zip(d.values(),d))

에 에.d.keys()당신은 그냥 쓸 수 있습니다.d왜냐하면 만약 당신이 반복기로 사전을 뒤지면, 그것은 관련 사전의 키를 돌려줄 것이기 때문입니다.

예: 이 동작의 경우:

d = {'a':1,'b':2}
for k in d:
 k
'a'
'b'

사전 이해를 통해 쉽게 수행할 수 있습니다.

{d[i]:i for i in d}
dict(map(lambda x: x[::-1], YourDict.items()))

.items()의 튜플 목록을 반환합니다.(key, value).map()목록의 요소를 검토하고 적용합니다.lambda x:[::-1]각 요소(태플)가 반대로 되도록 각 튜플은(value, key)지도에서 벗어난 새로운 목록에서.마침내.dict()새 목록에서 받아쓰기를 만듭니다.

Hanan의 대답은 더 일반적인 경우를 다루고 있기 때문에 정답입니다(다른 대답은 중복 상황을 모르는 사람에게는 다소 오해의 소지가 있습니다).Hanan의 답변에 대한 개선점은 setdefault를 사용하는 것입니다.

mydict = {1:a, 2:a, 3:b}   
result = {}
for i in mydict:  
   result.setdefault(mydict[i],[]).append(i)
print(result)
>>> result = {a:[1,2], b:[3]}

루프 사용:-

newdict = {} #Will contain reversed key:value pairs.

for key, value in zip(my_dict.keys(), my_dict.values()):
    # Operations on key/value can also be performed.
    newdict[value] = key

Python3를 사용하는 경우에는 약간 다릅니다.

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

인플레이스 솔루션 추가:

>>> d = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
>>> for k in list(d.keys()):
...     d[d.pop(k)] = k
... 
>>> d
{'two': 2, 'one': 1, 'four': 4, 'three': 3}

Python3에서 사용하는 것은 매우 중요합니다.list(d.keys())왜냐면dict.keys보기를 반환합니다.Python2를 사용하고 있다면,d.keys()충분합니다.

저는 이 버전이 가장 포괄적이라고 생각합니다.

a = {1: '하나', 2: '둘'}

swapd_a = {value : 키, a.value}의 값

인쇄(print_a)

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

(제 생각에는) 다른 답변들처럼 읽을 수 없는 대안이 있습니다.

new_dict = dict(zip(*list(zip(*old_dict.items()))[::-1]))

어디에list(zip(*old_dict.items()))[::-1]2개의 튜플 목록을 제공합니다.old_dict의 값과 키가 각각 표시됩니다.

언급URL : https://stackoverflow.com/questions/1031851/how-do-i-exchange-keys-with-values-in-a-dictionary

반응형