次の辞書のリストがあります
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
どのように並べ替えて取得できますか:
a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]
つまり、リストを辞書の値で降順にソートします。
次の辞書のリストがあります
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
どのように並べ替えて取得できますか:
a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]
つまり、リストを辞書の値で降順にソートします。
brandizzi の答えに加えて、次のようにすることができます。
sorted(a, key=dict.values, reverse=True)
ほとんど同じことですが、おそらくより慣用的です。
>>> sorted(a, key=lambda i: i.values()[0], reverse=True)
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}]
key
メソッドにパラメーターを渡すことができるlist.sort()
ため、比較は の戻り値の関数で行われますkey
。
>>> a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
>>> a.sort(key=lambda d: d.values()[0], reversed=True)
>>> a
[{23: 100}, {2: 102}, {3: 103}, {36: 103}, {43: 123}]
この場合、キーは辞書を受け取り、d
でその値のリストを取得する関数.values()
です。値は 1 つしかないため、返されたリストからこの値のみを取得します。次に、list.sort()
メソッドは、並べ替え時に、辞書自体ではなく、返された値を比較します。
私はむしろ使用したい(または少なくとも覚えておいてください).itervalues()
In [25]: sorted(a, key=lambda x: next(x.itervalues()), reverse=True)
Out[25]: [{43: 123}, {36: 103}, {2: 102}, {23: 100}, {3: 103}]