파이썬 튜플 받아쓰기


149

튜플의 경우 t = ((1, 'a'),(2, 'b')) dict(t)반환{1: 'a', 2: 'b'}

얻을 수있는 좋은 방법이 {'a': 1, 'b': 2}있습니까 (키와 발을 교환)?

궁극적으로 1given 'a'또는 2given 을 반환 할 수 있기를 원합니다 'b'. 아마도 dict로 변환하는 것이 가장 좋은 방법은 아닙니다.

답변:


277

시험:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict((y, x) for x, y in t)
{'a': 1, 'b': 2}

8
+1 Beautiful !, zip으로 시도해야했습니다 dict(zip(*zip(*t)[::-1])). 이것은 느리고 추악하며 더 많은 메모리를 사용합니다. 아마 3 배.
kevpie

@kevpie 파이썬의 멋진 점은 무언가를하는 방법을 표현할 수있는 수백 가지 방법이 있다는 것입니다.
bjd2385

좋아요, A는 트리플 무엇 당신은 당신이 할 수있는 경우 : dict((x, y) for x, y, z in t)또는 dict((x, (y, z)) for x, y, z in t)튜플로 두 번째와 세 번째 값을 얻을 수 있습니다.
guival

매우 빠르고 포괄적이며 간단합니다. 완벽한 답변.
gies0r

73

약간 간단한 방법 :

>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}

1
무엇이 더 빨라 집니까?
maazza

9
map과 dict 함수는 C로 구현되며 어떤 파이썬 버전보다 훨씬 빠릅니다
jterrace

1
나는 reverse명시 적으로 철자를 쓰는 것이 좋습니다.
Frerich Raabe

4
@maazza : 일반적으로 퍼포먼스 테스트는 (C 구현에서) map매핑되는 것이 다른 내장 함수 (예 :와 같은 reversed) 일 때 이해력보다 빠르다는 것을 제안합니다 . 대부분의 다른 경우에는 그 반대입니다. 그러나 추측하는 것보다 프로파일 링하는 것이 좋습니다 :)
Karl Knechtel

43

파이썬 2.7을 사용하는 경우 훨씬 간결합니다.

>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}

9
>>> dict([('hi','goodbye')])
{'hi': 'goodbye'}

또는:

>>> [ dict([i]) for i in (('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14)) ]
[{'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}]

이 답변이 OP의 질문에 어떻게 답변되는지 모르겠습니다
Luca Amerio

4

동일한 키에 대해 여러 값이있는 경우 다음 코드는 해당 키를 해당 키에 해당하는 목록에 추가합니다.

d = dict()
for x,y in t:
    if(d.has_key(y)):
        d[y].append(x)
    else:
        d[y] = [x]

2

몇 가지 방법이 있습니다.

>>> t = ((1, 'a'), (2, 'b'))

>>> # using reversed function
>>> dict(reversed(i) for i in t)
{'a': 1, 'b': 2}

>>> # using slice operator
>>> dict(i[::-1] for i in t)
{'a': 1, 'b': 2}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.