[python] 사전을 튜플 목록으로 변환하려면 어떻게해야합니까?

내가 같은 사전을 가지고 있다면 :

{ '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 정렬하거나 필요에 따라 구성하십시오.

참조 : items () , 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()] 

다른 예.

원하는 경우 목록 이해에 대해 자세히 알아보십시오. 목록 이해 는 그들과 함께 할 수있는 일입니다.


답변

명명 된 튜플 목록 만들기

namedtuple 을 사용하는 것이 종종 편리 할 수 ​​있습니다 . 예를 들어 다음과 같은 값으로 ‘name’사전을 키로, ‘score’사전을 갖습니다.

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

튜플로 항목을 나열하고 원하는 경우 정렬하고 이름과 점수를 얻을 수 있습니다.

>>> player = best[0]

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

이를 수행하는 방법 :

무작위 순서로 또는 컬렉션 순서를 유지합니다 .

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)


답변

원하는 것은 dictitems()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()]


답변

이것들은 Python 3.x와 Python 2.x의 주요 변경 사항입니다.

Python3.x 사용

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

Python 2.7의 경우

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