このようなデータ構造。python:キーのdictsのdictのソート
{
'ford': {'count': 3},
'mazda': {'count': 0},
'toyota': {'count': 1}
}
トップレベルの辞書の値の範囲内count
の値を並べ替えるための最良の方法は何ですか?
このようなデータ構造。python:キーのdictsのdictのソート
{
'ford': {'count': 3},
'mazda': {'count': 0},
'toyota': {'count': 1}
}
トップレベルの辞書の値の範囲内count
の値を並べ替えるための最良の方法は何ですか?
d = {'ford': {'count': 3},
'mazda': {'count': 0},
'toyota': {'count': 1}}
>>> sorted(d.items(), key=lambda (k, v): v['count'])
[('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})]
辞書として結果を維持するために、あなたはcollections.OrderedDict
を使用することができます
>>> from collections import OrderedDict
>>> ordered = OrderedDict(sorted(d.items(), key=lambda (k, v): v['count']))
>>> ordered
OrderedDict([('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})])
>>> ordered.keys() # this is guaranteed to come back in the sorted order
['mazda', 'toyota', 'ford']
>>> ordered['mazda'] # still a dictionary
{'count': 0}
バージョンの懸念:
d.iteritems()
の代わりd.items()
を使用することができますメモリ効率collections.OrderedDict
は、Python 2.7およびPython 3.2(a nd higher)dicitonaryは順序付けられていないデータ構造なので、ソートすることはできません。あなたの辞書d
から(やPython 2.7で、OrderedDict
をか)ソートされたリストを作成することができます。
sorted(d.iteritems(), key=lambda item: item[1]["count"])
このリストはcollections.OrderedDict
のコンストラクタの引数として使用することができます。
さらに洗練された方法では、itemgetterを使用して、その値を使用して順序付けされたdictをもう一方の提案として構築します。
>>> from operator import itemgetter
>>> sorted(s,key=itemgetter,reverse=True)
['ford', 'toyota', 'mazda']
あなたが値でいくつかの項目で辞書をソートしたい場合は辞書で、要素の追加の順序は保持されないため、結果はあなたは、辞書として保存することはできません。あなたはOrderedDictを使用する必要があることを示します。 1つのソリューションは、いったんソートされると、(キー、値)タプルのリストからOrderedDictを生成します。
>>> collections.OrderedDict(sorted(d.iteritems(),key=lambda x:x[1]["count"],reverse=True))
OrderedDict([('ford', {'count': 3}), ('toyota', {'count': 1}), ('mazda', {'count': 0})])
>>>
私は1つが実際にそれを並べ替えることはできませんので辞書は、ハッシュテーブルだと思います。 がソートすることができ、リスト、に分類値を格納してみてください。
l = []
for x in sorted(dictionary.keys()):
l.append([dictionary[x]])
あなたが本当に鍵を保持したい場合は、おそらくだけでなく、リストに追加します。リストにアクセスすると、インデックス(0,2,4、...)もキーで、奇数インデックスは値(1,3,5、...)であることを確認してください。
sorted_x = sorted(x、key = lambda a:x [a] ['count']) ここでsorted_xは ['mazda'、 'toyota'、 'フォード']次に
あなたが印刷することができ: をiについてsorted_xで: 印刷X [i]は
結果: { 'カウント':0} { 'カウント':1} {[カウント': 3}
ディクショナリは順序付けされていないデータ型です。ソートすることはできません。 'collections.OrderedDict'を使うことができます。 – 0xc0de