2017-10-14 1 views
-2

파이썬에서 아무나 도와 줄 수 있습니까? 실제로Python dict가 예기치 않은 순서로 값을 출력합니다.

2 
3 
1 

할 수있는 인쇄

1 
2 
3 

하지만 결과가 될 것

role = { 
    'user': 1, 
    'moderator': 2,  
    'admin': 3 
} 

for r in role: 
    print role[r] 

내가 생각 :

나는 다음과 같습니다 인쇄 문을 사용하여 딕셔너리를 만들어 아무도 왜 말해?

+4

사전은 파이썬에서 정렬되지 않기 때문에. (3.6에서 가장 보편적 인 통역사가 명령을 내렸지 만 이것은 구현 세부 사항으로 간주됩니다). –

+4

[Key-ordered dict in Python] (https://stackoverflow.com/questions/1319763/key-ordered-dict-in-python) –

+3

의 가능한 복제본은 docs : https : // docs에 명시되어 있습니다. python.org/2/faq/design.html#how-are-dictionaries-implemented – rainer

답변

0

From the docs :

... 키의 어떠한 정렬 된 순서를 유지하지 않고, 상기 .keys 같은 어레이() 및 .items()를 이송한다 일부 임의 뒤죽박죽 위해 출력 사전의 콘텐츠를 의지 할 .

따라서 dict에이 항목을 고정하면 주문을 보장 할 수 없습니다. 주문을 유지해야하는 경우 목록을 대신 사용해야합니다. 당신이 밖으로 값의 숫자에 따라 이러한 항목을 인쇄하려면

, 당신은 할 수 있습니다 :

for r in sorted(role.items(), key=lambda x: x[1]): 
    print r 

출력 :

('user', 1) 
('moderator', 2) 
('admin', 3) 

하거나 목록에 저장 :

role = ['user', 'moderator', 'admin'] 
for r in role: 
    print r 
+0

정말 고마워요! – KoooPooo

+0

@KoooPooo에 오신 것을 환영합니다 StackOverflow! 해답이 도움이 되었다면 '고맙습니다'라고 말하면 안됩니다. 문제를 해결하면 진행하고 받아 들인 대답으로 표시합니다. – jpyams

0

일반 사전은 요소가 삽입되는 순서를 유지하지 않으므로 사전 만있는 것입니다. 해시 테이블 형식인데 순서가 지정된 사전을 사용할 수 있습니다. link

+0

고맙습니다. – KoooPooo

관련 문제