dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
この辞書を値の降順で並べ替えたいのですが、どうすればキーにアクセスできますか?
サンプルコード:
for x in sorted(dic.values()):
print(key, dic[key])
また、値が等しい場合は、出力をキーのアルファベット順に並べ替えたいと思います。
期待される出力:
Coffee 35
Tea 35
Chocolate 10
dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
この辞書を値の降順で並べ替えたいのですが、どうすればキーにアクセスできますか?
サンプルコード:
for x in sorted(dic.values()):
print(key, dic[key])
また、値が等しい場合は、出力をキーのアルファベット順に並べ替えたいと思います。
期待される出力:
Coffee 35
Tea 35
Chocolate 10
必要なのは、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
1つのオプション:
for key in sorted(dic, key=dic.get, reverse=True):
print(key,dic[key])
これは辞書のキーをソートしますが、dic.get
キー機能として使用するため、値で効果的にソートされます。出力例は、降順でソートすることを示しているので、を含めreverse=True
ました。
編集:辞書の値が実際にカウントされる場合は、辞書のcollections.Counter
代わりに使用することを検討してください。そのクラスにはmost_common()
、アイテムを目的の順序で返すメソッドがあります。
示唆する他の答え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')
この順序で印刷されます。(交換プロセスは並べ替えの目的でのみ行われ、実際に返されるアイテムは元のアイテムです。)