2017-04-03 2 views
0
original = ["aga", "aaa", "aba"] 

dict = { 
"aba": 1, 
"aaa": 0, 
"aga": 1 
} 

dict 값으로 정렬해야하고 타이 브레이커가 원래 순서를 유지해야합니다. 어떻게해야합니까? 매우 단순화 된 예. 키로 파이썬 정렬, 넥타이를 깨기

내가 시도 :

final = sorted(sorted(original, key=lambda x: (dict[x]), key=original.index)) 
+1

왜 'collections.OrderedDict'를 직접 사용하지 않습니까? –

+1

나는 내장 정렬 방법이 관계의 경우 원래 순서를 보존한다는 인상하에있었습니다. 'sorted (original, key = lambda x : (dict [x]))'는'[ 'aaa', 'aga', 'aba']'를 준다. 그게 네가 원하는게 아니야? 그렇지 않다면'final'의 원하는 내용을 정확히 제공 할 수 있습니까? – Kevin

+0

여러 개의 키로 [파이썬 정렬 사전 목록] 가능한 중복 (http://stackoverflow.com/questions/1143671/python-sorting-list-of-dictionaries-by-multiple-keys) – Prune

답변

4

를 그냥 사전에 자신의 값을 기준으로 정렬. 원래 순서는 관계를 위해 보존됩니다

final = sorted(original, key=lambda x: dct[x]) 
print final 
# ['aaa', 'aga', 'aba'] 

Timsort - 파이썬의 표준 정렬 알고리즘 - 안정이다; 동일한 항목을 비교하는 항목은 상대적 순서를 유지합니다.

또 다른 참고 사항으로, 나중에 코드에서 사용할 수없는 내장 코드를 사용하지 않으려면 dict 또는 list과 같은 이름을 사용하지 마십시오.

0

파이썬의 사전은 원래 순서를 저장하지 않습니다. 그러나 OrderedDict를 사용하여 원하는 순서를 유지할 수 있습니다.

import collections 
d = collections.OrderedDict() 
d['aba'] = 1 
d['aaa'] = 0 
d['aga'] = 1 
print(d)