문제

다음과 같은 사전이 있는 경우:

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

이걸 어떻게 변환할 수 있나요?

[ ('a', 1), ('b', 2), ('c', 3) ]

그리고 이걸 어떻게 변환할 수 있나요?

[ (1, 'a'), (2, 'b'), (3, 'c') ]
도움이 되었습니까?

해결책

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

원하는 순서는 아니지만 딕트는 어쨌든 특정 순서가 없습니다.1 정렬하거나 필요에 따라 정리하십시오.

보다: 항목 (), iteritems ()


Python 3.x에서는 사용하지 않습니다 iteritems (더 이상 존재하지 않음) 대신 사용 items, 이제 "보기"를 사전 항목으로 반환합니다. 참조 새로운 것 Python 3.0 및 새로운 문서 보기에 대한 문서.

1 : dicts에 대한 삽입 주문 보존 Python 3.7에 추가되었습니다

다른 팁

아무도하지 않았으므로 py3k 버전을 추가하겠습니다.

>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> list(d.items())
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.items()]
[(1, 'a'), (3, 'c'), (2, 'b')]

목록 이해력을 사용할 수 있습니다.

[(k,v) for k,v in a.iteritems()] 

당신을 얻을 것입니다 [ ('a', 1), ('b', 2), ('c', 3) ] 그리고

[(v,k) for k,v in a.iteritems()] 

다른 예.

목록 이해에 대해 자세히 알아보십시오 당신이 좋아한다면, 당신이 그들과 함께 할 수있는 일이 매우 흥미 롭습니다.

명명된 튜플 목록 만들기

종종 매우 편리하게 사용할 수 있습니다. 명명된튜플.예를 들어 다음과 같은 키로 '이름', 값으로 '점수'라는 사전이 있습니다.

d = {'John':5, 'Alex':10, 'Richard': 7}

항목을 튜플로 나열하고 원하는 경우 정렬할 수 있으며 Python 방식으로 다음과 같이 가장 높은 점수(색인=0)를 가진 플레이어의 이름과 점수를 얻을 수 있습니다.

>>> player = best[0]

>>> player.name
        'Alex'
>>> player.score
         10

이를 수행하는 방법:

무작위 순서로 나열하거나 순서를 유지합니다. collections.OrderedDict:

import collections
Player = collections.namedtuple('Player', 'name score')
players = list(Player(*item) for item in d.items())

순서대로 값('점수')별로 정렬됩니다.

import collections
Player = collections.namedtuple('Player', 'score name')

가장 낮은 점수부터 먼저 정렬됩니다.

worst = sorted(Player(v,k) for (k,v) in d.items())

가장 높은 점수부터 먼저 정렬됩니다.

best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)

당신이 원하는 것은 dict'에스 items() 그리고 iteritems() 행동 양식. items (키, 값) 튜플 목록을 반환합니다. 튜플은 불변이기 때문에 뒤집을 수 없습니다. 따라서, 당신은 항목을 반복하고 새로운 튜플을 만들려면 (값, 키) 튜플을 얻으십시오. 반복을 위해 iteritems 발전기를 사용하여 전체 목록을 메모리에 유지하지 않고 (키, 값) 튜플을 생성하기 때문에 바람직합니다.

Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = { 'a': 1, 'b': 2, 'c': 3 }
>>> a.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v,k) for (k,v) in a.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]
>>> 
[(k,v) for (k,v) in d.iteritems()]

그리고

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

>>> [(x,a[x]) for x in a.keys() ]
[('a', 1), ('c', 3), ('b', 2)]

>>> [(a[x],x) for x in a.keys() ]
[(1, 'a'), (3, 'c'), (2, 'b')]

에 의해 keys() 그리고 values() 사전 방법 및 zip.

zip 주문 된 사전처럼 작용하는 튜플 목록을 반환합니다.

데모:

>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> zip(d.keys(), d.values())
[('a', 1), ('c', 3), ('b', 2)]
>>> zip(d.values(), d.keys())
[(1, 'a'), (3, 'c'), (2, 'b')]
d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
   k = (i,d[i])
   list.append(k)

print list

python3.x 사용

for key, value in dict.items():
    temp = [key,value]
    dictlist.append(temp)

Python 2.7 용

for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

감사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top