2017-06-14 17 views
1

は、私は、ソート値とソートキーであること下位であること、最も高いためで、この辞書をソートしたいdictを値で並べ替え、次にキーで並べ替える1つのライナー?

sample = { 
    'a' : 100, 
    'b' : 3, 
    'e' : 42, 
    'c' : 250, 
    'f' : 42, 
    'd' : 42, 
} 

...私は、次の辞書を持っていると仮定します。

結果のキーと値のペアはこのことでしょう...

(('b', 3), ('d', 42), ('e', 42), ('f', 42), ('a', 100), ('c', 250)) 

私はすでにPythonコードの数行を書くことでこれを行う方法を知っています。しかし、私はこの種の処理を実行する、Pythonの1つのライナーを探しています。おそらくは、1つの解説または1つ以上のPythonの関数型プログラミング構造を使用しています。

このような1ライナーは、Pythonでも可能ですか?

答えて

4

あなたが値とキーの両方を使用していますラムダを定義することができます。

sorted(sample.items(), key=lambda x: (x[1], x[0])) 
+0

ああ、私は 'key'引数について忘れていました。 – HippoMan

1

あなたはオペレータモジュールを使用することができます。

import operator 
sample = { 
'a' : 100, 
'b' : 3, 
'e' : 42, 
'c' : 250, 
'f' : 42, 
'd' : 42, 
} 

sorted_by_value = tuple(sorted(sample.items(), key=operator.itemgetter(1))) 

sorted_by_key = tuple(sorted(sample.items(), key=operator.itemgetter(0))) 

sorted_by_value:

(('b', 3), ('e', 42), ('d', 42), ('f', 42), ('a', 100), ('c', 250)) 

sorted_by_key:

(('a', 100), ('b', 3), ('c', 250), ('d', 42), ('e', 42), ('f', 42)) 
+1

あなたの答えは、辞書のキーによるソートのみを示しています。 – martineau

+0

sorted_by_value変数は辞書を値でソートし、sorted_by_key変数はキーで辞書をソートします。私の最近の編集を見てください。 – Ajax1234

+1

はい、いずれも元の質問で指定したリストを返しません。 – HippoMan

関連する問題