2010-12-20 4 views
11

설정 :사전 나는 사전을 만들고있어 시작

d = {"server":"mpilgrim", "database":"master"} 
d['mynewkey'] = 'mynewvalue' 

을하지만 그것을 표시 할 때 나는이 딕셔너리가 반전되는 것을 보았다.

print(d) 

{'mynewkey': 'mynewvalue', 'database': 'master', 'server': 'mpilgrim'} 

어떻게 되돌릴 수 있습니까?

사전이 분류 가능하지 않은 것이 사실이라면 정보의 순서가 중요한 곳에서 수집을 사용해야합니까?

답변

17

사전 (순서가 결정하지만, 당신도 생각하지 않는 요소의 소수에 의존하고 신경 쓰지해야 순서가 있습니다

또한이 질문에 봐 키, 삽입 순서, 충돌 등). Python 2.7 이상에서는 collections.OrderedDict을 사용하십시오. 이전 버전을 사용해야하는 경우 google이 여러 가지 구현 방식을 사용할 수 있습니다. 당신은 파이썬 3.6 사전을 사용하는 경우

+0

가장 쉬운 구현의 존재를 추천 할 것입니다 삽입 순서로 정렬 튜플의 목록, 속도가 문제가되지 않으면 especiall. – katrielalex

+0

네, 그게 가장 쉽지만, 끔찍하게 * 수행합니다. 특히 "실제"(즉, 'O (1)'읽기/쓰기 /'in') 알고리즘을 사용하는 경우 – delnan

1

당신의 사전은 꽤 되돌려지지 않았습니다. 그것은 부분적으로 당신의 열쇠의 해시에 따라 정렬됩니다. 사용자 지정 사전을 사용하지 않고이 순서를 변경할 수 없습니다. Python 2.7 이상에서는 순서가 지정된 사전 (collections.OrderedDict)을 사용할 수 있습니다.

이전 버전에서는 다음을 사용할 수 있습니다. recipe. -의 해시 What is the best ordered dict implementation in python?

17
from collections import OrderedDict 

d = OrderedDict() 
d["server"] = "mpilgrim" 
d["database"] = "master" 
d['mynewkey'] = 'mynewvalue' 

print(d) 

OrderedDict([('server', 'mpilgrim'), ('database', 'master'), ('mynewkey', 'mynewvalue')]) 
+0

아니요, "서버"시작 부분에 "mpilgrim"이 먼저 오지 않았으므로 좋지 않습니다. 지금은 두 번째입니다 – user278618

+0

맞아요, 일단 눈치 채자 키 삽입을 수정했습니다. OrderedDicts의 경우, [] 연산자 ('__setitem__')를 사용하여 키를 추가해야합니다. 삽입 순서가 유지됩니다. – Aphex

관련 문제