2008-09-10 2 views
11

목록과 다른 사전은 정렬되지 않으며 '정렬'속성이 없습니다. 따라서 처음 추가 할 때 동일한 순서로 항목을 가져올 수는 없습니다.파이썬에서는 어떻게 사전에서 정렬 된 항목을 쉽게 검색 할 수 있습니까?

문자열을 포함하는 사전을 키 값으로 반복하고 키로 오름차순으로 검색하는 가장 쉬운 방법은 무엇입니까?

d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'} 

내가 키에 의해 정렬 된 다음과 같은 순서에 관련된 값을 인쇄 할 :

this is a 
this is b 
this is c 

답변

1

이 조각이 그렇게 할 것입니다

예를 들어, 당신이 있었다. 자주 해보려한다면, 'sortkeys'방법을 사용하거나 눈에 쉽게 맞출 수 있습니다.

keys = list(d.keys()) 
keys.sort() 
for key in keys: 
    print d[key] 

편집 : dF 솔루션이 더 좋습니다. - sorted()에 대한 모든 것을 잊어 버렸습니다.

+0

예,하지만 분류 오래된 파이썬 (이전 2.4)에서 사용할 수 없습니다, 그래서이 관용구는 여전히 유능한. – jmanning2k

16

키의 값으로 정렬 된 값이 필요하다는 의미입니까? 이 경우 이 그것을 수행해야합니다

for key in sorted(d): 
    print d[key] 

편집 : 변경 정렬 (d.keys()), 감사 Eli 대신 (d)에 분류되어 사용하기!

+1

사전을 반복하면 키를 반복하기 때문에 "d.keys()"라고 말할 필요없이 실제로 "정렬 된 키 (d) :"라고 말할 수 있습니다. –

16

이하,

for key, value in sorted(d.items()): 
    print value 
+0

그냥 정렬되지 않습니다 - 조회를 피하십시오 –

+0

"조회를 피하는"정확히 무엇을 의미합니까? 성능이 향상됩니까? –

+1

@Ray : 예, for 루프에서 "key, value"를 사용하면 사전의 모든 항목에 대해 d [key]의 해시 테이블 조회를 수행하지 않아도됩니다. 나는 위의 해결책이 더 빠를 것이라고 믿지만 시스템과 데이터에서 그것을 측정해야만 확신 할 수 있습니다. –

1
>>> d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'} 
>>> for k,v in sorted(d.items()): 
...  print v, k 
... 
this is a a 
this is b b 
this is c c 
0
d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'} 
ks = d.keys() 
ks.sort() 
for k in ks: 
    print "this is " + k 
1
for key in sorted(d): 
    print d[key] 
1

또한 값을 기준으로 사전을 정렬하고 정렬 순서 제어 할 수 있습니다

import operator 

d = {'b' : 'this is 3', 'a': 'this is 2' , 'c' : 'this is 1'} 

for key, value in sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True): 
    print key, " ", value 

출력이 B
을 3입니다. 이것은 2
c입니다. 1

0

"주문"대신 "정렬"을 의미합니까? 귀하의 질문은 사전을 분류하는 것이지 주문하지는 않습니다. "주문한"것을 의미하는 경우 컬렉션 모듈에서 OrderedDict를 사용할 수 있습니다.

from collections import OrderedDict 

참고 정보 : 이러한 사전은 키/값 쌍 입력 된 순서 기억 https://docs.python.org/2/library/collections.html#collections.OrderedDict

관련 문제