私が見つけた唯一のメソッドは、python2で機能するか、タプルのリストのみを返します。
辞書を並べ替えることは可能ですか? {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
、その値で?
私が達成したいソートされた辞書の順序は、最大から最小の順です。結果は次のようになります。
bb 4
aa 3
cc 2
dd 1
そして、並べ替えた後、テキストファイルに保存します。
itemgetter
(他の回答を参照)は(私が知っているように)大規模な辞書ではより効率的ですが、一般的な場合では、d.get
が勝ると信じています。また、追加のimport
は必要ありません。
>>> d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
>>> s = [(k, d[k]) for k in sorted(d, key=d.get, reverse=True)]
>>> for k, v in s:
... k, v
...
('bb', 4)
('aa', 3)
('cc', 2)
('dd', 1)
または、d.__getitem__
をkey
関数として設定すると、d.get
をわずかに上回るパフォーマンスを提供できることに注意してください。
from collections import OrderedDict
from operator import itemgetter
d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
print(OrderedDict(sorted(d.items(), key = itemgetter(1), reverse = True)))
プリント
OrderedDict([('bb', 4), ('aa', 3), ('cc', 2), ('dd', 1)])
あなたの最後の文からですが、タプルのリストはうまくいくようです。
from operator import itemgetter
d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
for key, value in sorted(d.items(), key = itemgetter(1), reverse = True):
print(key, value)
印刷する
bb 4
aa 3
cc 2
dd 1
辞書をソートするには、operatorモジュールを使用できます。 ここ は、オペレータモジュールのドキュメントです。
import operator #Importing operator module
dc = {"aa": 3, "bb": 4, "cc": 2, "dd": 1} #Dictionary to be sorted
dc_sort = sorted(dc.items(),key = operator.itemgetter(1),reverse = True)
print dc_sort
出力シーケンスはソートされたリストになります:
[('bb', 4), ('aa', 3), ('cc', 2), ('dd', 1)]
キーに関してソートしたい場合は、
dc_sort = sorted(dc.items(),key = operator.itemgetter(0),reverse = True)
出力シーケンスは次のとおりです。
[('dd', 1), ('cc', 2), ('bb', 4), ('aa', 3)]
より単純な(および最大10%高速)方法は、ラムダ式を使用することです
d = {'aa': 3, 'bb': 4, 'cc': 2, 'dd': 1}
s = sorted(d.items(), key=lambda x: x[1], reverse=True)
for k, v in s:
print(k, v)
タイミング
IOを画像から除外するために、_print(k, v)
をpass
に置き換えたCPython 3.7上の%%timeit
.
D.get()を使用して受け入れられた回答:
1.19 µs ± 16.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
ラムダ式:
1.07 µs ± 10.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
valuesでreverse順序(最大から最小)でソートできます 辞書の理解 :
{k: d[k] for k in sorted(d, key=d.get, reverse=True)}
# {'b': 4, 'a': 3, 'c': 2, 'd': 1}
昇順(最小から最大)でvaluesでソートする場合
{k: d[k] for k in sorted(d, key=d.get)}
# {'d': 1, 'c': 2, 'a': 3, 'b': 4}
keysで昇順に並べ替える場合
{k: d[k] for k in sorted(d)}
# {'a': 3, 'b': 4, 'c': 2, 'd': 1}
辞書は挿入順序を保持するため、これはCPython 3.6以降およびPython 3.7以降の実装で機能します。
辞書をソートし、後で辞書として機能させるには、標準ライブラリの OrderedDict を使用できます。
それが必要なものではない場合、タプルのリストを残すソート関数を再検討することをお勧めします。キーと値のペア(タプル)の順序付きリストではない場合、どの出力が必要でしたか?