2010-12-16 6 views

답변

17

주문은 내부적으로 어떻게 작동하며 해시 테이블에서 어떤 순서로 끝나는 지와 관계가 있습니다. 이는 차례로 키 해시 - 값, 삽입 된 순서 및 사용중인 파이썬 구현에 달려 있습니다.

순서는 임의적이지만 임의의 순서가 아니며 어떤 순서인지 알면 유용하지 않습니다.

정렬 된 키 목록을 얻으려면 sorted(D)을 사용하십시오.이 경우 ['a', 'b', 'c']을 반환합니다.

+1

사전이 어떻게 작동하는지 알고 싶다면 다음을보십시오 : http://us.pycon.org/2010/conference/schedule/event/12/ – DisplacedAussie

+0

위의 링크에 액세스 할 수 없습니다. – SKT

+0

아마도이 대화라고 생각합니다. https://www.youtube.com/watch?v=C4Kc8xzcA68 –

5

:

그것은 키의 정렬되지 않은 집합으로 사전에 생각하는 것이 가장 좋습니다 : (한 사전 이내) 키를 고유 한 요구 사항, 값 쌍.

+0

감사합니다. 나는 사전이 정렬되어 있지 않다는 것을 알고있었습니다. 따라서 파이썬이 표시 순서를 변경 했으므로 혼란 스러웠습니다. – QQending

+2

언제든지 주문이 변경 될 수 있음을 명시했습니다. 따라서 구현이 더 빨라질 수 있습니다. 특정 순서로 키가 필요하면 키를 정렬 할 수 있습니다. –

+2

QQending : unordered는 (다른 것들 중에서) 나가는 주문은 넣은 주문이 아닐 수도 있으므로, 왜 비단뱀의 행동이 혼란 스럽습니까? "정렬 된"순서가 아닌 다른 이유를 궁금해하면 dicts는 검색 트리가 아니라 해시 테이블을 사용합니다. 순서는 아마도 테이블의 현재 크기 또는 예측 불가능한 키 크기의 해시를 기반으로 할 것입니다. –

2

어떤 순서로든 만족합니다. 그러한 것은 사전의 특성입니다. 당신이 특정 순서로에게 원하는 경우, 당신은 자신을해야 할 :

>>> d = {'pax': 1, 'george': 2, 'guido' : 3} 

>>> d 
{'pax': 1, 'george': 2, 'guido': 3} 

>>> [(key,d[key]) for key in sorted(d)] 
[('george', 2), ('guido', 3), ('pax', 1)] 
+0

사실은 아닙니다. Lennart의 대답은 기술적으로 더 정확합니다. "순서는 임의적이지만 임의적이 아닙니다." –

+1

아무데도 "임의"라고 언급하지 않았습니다. 사전에서 순서를 지정하지 않았다는 것입니다. 그것은 적합하다고 생각되는 순서대로 그들을 반환 할 수 있습니다. 내용과 조작 기록을 기반으로 결정 론적 순서로 반환 될 수 있다는 사실은 원하는 방식대로 직접 정렬 할 책임이 없음을 나타냅니다. "사전 객체의 keys() 메소드는 모든 사전에 사용 된 키를 임의의 순서로 정렬합니다 (정렬하려면 sorted() 함수를 적용하십시오). " – paxdiablo

7

파이썬 2.7에서는이 Ordered Dict를 사용할 수 있습니다.

관련 문제