2012-03-29 7 views
19

私はキーまたは値で並べ替えることができますが、値で並べ替え、キーで並べ替える必要があります。これを説明するために、より良い私はあなたに私の問題を表示することができます。辞書を値で並べ替える場合は

dict = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4} 

を私は私の出力がその値で降順にソートして、そのキー(アルファベット順)で(A-Z)昇順することにしたいです。そのようなリストに結果:の出力と

['peach', 'banana', 'beetroot', 'almond', 'apple']

私は今のところそれを行う方法を知っている唯一の方法は次のとおりです。['almond', 'apple', 'banana', 'beetroot', 'peach']

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k))] 

の出力でしたがって、値は昇順に、キーはアルファベット順に昇順(AZ)にソートされています。だから、私はこれを逆場合:

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k), reverse=True)] 

の出力で:['peach', 'beetroot', 'banana', 'apple', 'almond']

これはアルファベット順(Z-A)を降順で降順の値およびキーをソートしました。

値を降順でソートしたり、キーを昇順(つまり、A-Z)に並べ替える方法はありますか?

答えて

34

値が数値であるという事実を利用する必要があります。

>>> [v[0] for v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))] 
['peach', 'banana', 'beetroot', 'almond', 'apple'] 
+6

Pythonの3タプルパラメータがアンパック除去ので、ラインは上記今 '[V [0]ソート(d.items()におけるVため、キー=ラムダKVのように記述されるべきであることだけリマインダー:(-kv [1]、kv [0]))] '。 PEP 3113 https://www.python.org/dev/peps/pep-3113/ –

+0

を参照してください。キー機能は、逆にする必要がない場合は、 'operator.itemgetter(1、0)' *と書くこともできますキー/値の1つの順序。 – Moberg

5

降順の値でソートする場合は、負の数量の場合は、値が負の値でソートされます。

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (-v,k))] 
1
>>> d = {'apple':2, 'banana':3, 'almond':2, 'beetroot':3, 'peach':4} 
>>> [k for k, v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))] 
['peach', 'banana', 'beetroot', 'almond', 'apple'] 
関連する問題