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

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

私はdict値でソートする必要があり、タイブレーカーは元の順序を保つ必要があります。非常に単純化された例。Pythonのキーによるソート、ネクタイの破れ

私が試した:

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

なぜ 'collections.OrderedDict'を直接使用しないのですか? –

+1

私は、組み込みソートメソッド_does_がネクタイの場合は元の順序を保持しているという印象を受けました。 'sort(元、key =ラムダ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の標準ソートアルゴリズム - 安定です。同じものを比較するアイテムは相対的な順序を保持します。

dictまたはlistのような名前を使用しないでください。後でコードで組み込み関数を使用できないようにすることは避けてください。

0

Pythonの辞書は元の順序を保存しません。ただし、代わりにOrderedDictを使用して、希望する注文を維持することができます。

import collections 
d = collections.OrderedDict() 
d['aba'] = 1 
d['aaa'] = 0 
d['aga'] = 1 
print(d) 
関連する問題