나는 다음과 같은 사전을 가지고있다 : 값으로 정렬 된 Python 사전을 반복하는 방법은 무엇입니까?
값을 반복하지 않고 키를 사용하고 싶다. 다른 말로하면 :
(b, 1)
(c, 2)
(a, 6)
가장 쉬운 방법은 무엇입니까?
나는 다음과 같은 사전을 가지고있다 : 값으로 정렬 된 Python 사전을 반복하는 방법은 무엇입니까?
값을 반복하지 않고 키를 사용하고 싶다. 다른 말로하면 :
(b, 1)
(c, 2)
(a, 6)
가장 쉬운 방법은 무엇입니까?
sorted(dictionary.items(), key=lambda x: x[1])
는 :-)
import operator
sorted(dictionary.items(), key=operator.itemgetter(1))
그러나 operator
버전의 items
방법은 당신에게 (키, 값) 튜플의 목록을 제공 CPython의 2.5 +
필요 이는 sorted
및 맞춤 정렬 키를 사용하여 정렬 할 수 있습니다.
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
>>> a={ 'a': 6, 'b': 1, 'c': 2 }
>>> sorted(a.items(), key=lambda (key,value): value)
[('b', 1), ('c', 2), ('a', 6)]
파이썬 3에서는 람다식이 lambda x: x[1]
으로 변경되어야합니다.
처음 세 줄을 제거하고 마지막 줄을 제거 할 수 있습니다 ... 지금 조금 바쁜 것 같습니다. –
튜플 압축 풀기는 파이썬 3에서 더 이상 지원되지 않습니다 ... 불행히도. – Stephan202
@Nikhil 헤더가 중요하다고 생각합니다. 특히 @ Stephan의 의견에 따르면 데모 용 버전은 중요합니다. –
비 파이썬 3 프로그램의 경우 iteritems를 사용하여 발전기의 성능을 향상 시키십시오. 생성기의 성능을 향상 시키려면 모든 iteritem을 한 번에 하나씩 반환하는 대신 한 번에 하나씩 값을 생성하십시오.
sorted(d.iteritems(), key=lambda x: x[1])
는 더 큰 사전을 위해, 우리는 한 단계 더 가서는 람다와 함께 지금처럼 대신 파이썬의 주요 기능 be in C을 가질 수 있습니다.
import operator
sorted(d.iteritems(), key=operator.itemgetter(1))
만세!
우. operator.itemgetter와 잘 어울립니다. 단. –
테스트를 거치지는 않았지만 소모품 이터레이터에서 '정렬'이 목록보다 더 잘 수행된다는 주장에 회의적입니다. 나는'sorted '가 가장 먼저하는 일은 iterator를리스트로 읽는 것이라고 생각한다. 여기에 성능 향상이 있는지 여부는 매우 분명하지 않습니다. –
종종 매우 편리 할 수 있습니다. namedtuple. 예를 들어, 이름의 사전을 가지고 점수 당신은 '점수'에 정렬 할 :
worst = sorted(Player(v,k) for (k,v) in d.items())
먼저 가장 높은 점수로 정렬 :
import collections
Player = collections.namedtuple('Player', 'score name')
d = {'John':5, 'Alex':10, 'Richard': 7}
먼저 낮은 점수로 정렬
best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
나열된 튜플에서 '키'와 '값'의 순서는 (값, 키)이지만 이제는 이름과 점수를 얻을 수 있습니다. 차선의 플레이어 (색인 = 1)가 매우 파이썬 적으로 like :
player = best[1]
player.name
'Richard'
player.score
7
http://stackoverflow.com/questions/613183/sort-a-dictionary-in-python-by-the-value –
안 속는 사람을 복제. 다른 하나는 사전을 분류하기를 원하며 불가능합니다. 나는 정렬 된 순서로 사전을 반복하고 싶다. – mike
이며 코드는 정확히 같습니다. – SilentGhost