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

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

我需要按字典值排序,而且破解者需要保持原始順序,我該怎麼做?例子非常簡化。Python按鍵排序,打破關係

我想:

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

爲什麼不直接使用'collections.OrderedDict'? –

+1

我的印象是內置的排序方法_does_在綁定的情況下保留原始順序。 'sort(original,key = lambda x:(dict [x]))'給出'['aaa','aga','aba']'。這不是你想要的嗎?如果不是,你能給出'final'的確切內容嗎? – Kevin

+0

可能重複[Python按字典排列多個鍵的列表](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 - Python的標準排序算法 - 是穩定;比較相等的項目保留其相對順序。

另一方面,不要使用像dictlist這樣的名稱來避免內建代碼在代碼中稍後不可用。

0

Python中的詞典不存儲原始順序。但是,您可以使用OrderedDict代替您維護的訂單:

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