2
dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}

この辞書を値の降順で並べ替えたいのですが、どうすればキーにアクセスできますか?

サンプルコード:

for x in sorted(dic.values()):
    print(key, dic[key])

また、値が等しい場合は、出力をキーのアルファベット順に並べ替えたいと思います。

期待される出力:

Coffee 35
Tea 35
Chocolate 10
4

3 に答える 3

9

必要なのはdict.items()(key, value)タプルを提供するメソッドです。

値で並べ替えるには、メソッドを使用します。keyこの場合はoperator.itemgetter()、タプルから2番目の値を取得して並べ替え、reverse属性を設定して目的の順序で取得します。

>>> from operator import itemgetter
>>> dic={'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
>>> for key, value in sorted(dic.items(), key=itemgetter(1), reverse=True):
...     print(key, value)
... 
Tea 35
Coffee 35
Chocolate 10

編集:2番目の並べ替えとしてキーで並べ替える場合は、値のタプルを渡すだけで、Pythonは最初の値、次に2番目の値などで並べ替えます。唯一の問題はreverseを使用することです。それらを間違った順序で。ハックとして、値の負のバージョンを使用して、逆方向に並べ替えることはありません。

>>> for key, value in sorted(dic.items(), key=lambda x: (-x[1], x[0])):
...     print(key, value)
... 
Coffee 35
Tea 35
Chocolate 10
于 2012-06-21T13:18:40.780 に答える
7

1つのオプション:

for key in sorted(dic, key=dic.get, reverse=True):
    print(key,dic[key])

これは辞書のキーをソートしますが、dic.getキー機能として使用するため、値で効果的にソートされます。出力例は、降順でソートすることを示しているので、を含めreverse=Trueました。

編集:辞書の値が実際にカウントされる場合は、辞書のcollections.Counter代わりに使用することを検討してください。そのクラスにはmost_common()、アイテムを目的の順序で返すメソッドがあります。

于 2012-06-21T13:18:13.073 に答える
1

示唆する他の答えdict.items()は部分的に正しいです。しかし、ソートプロセスにキーを含めたいので(私があなたが正しいと理解している場合)、アイテム(本質的にタプル(key, value))を逆にします。だから使用する

data={'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
for item in sorted(dic.items(), key=lambda it: (-it[1], it[0])):
    print item

このkeyパラメーターは、アイテムのソートに使用される関数を提供します。アイテムをキーに変換し、実際に並べ替えに使用します。

あなたの場合、ここで与えられたアイテムが最初に変換されるように、降順/昇順の混合ソートが必要です

(-35, 'Coffee')
(-35, 'Tea')
(-10, 'Chocolate')

この順序で印刷されます。(交換プロセスは並べ替えの目的でのみ行われ、実際に返されるアイテムは元のアイテムです。)

于 2012-06-21T13:29:15.000 に答える