我有以下词典列表
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
如何对其进行排序以获取:
a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]
我的意思是,按照其dicts的值按降序对列表进行排序。
答案 0 :(得分:6)
除了brandizzi的答案,你可以选择:
sorted(a, key=dict.values, reverse=True)
几乎相同,但可能更惯用。
答案 1 :(得分:3)
>>> sorted(a, key=lambda i: i.values()[0], reverse=True)
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}]
答案 2 :(得分:1)
您可以将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()
的列表。由于只有一个值,我们从返回的列表中获取此值。然后,list.sort()
方法将在排序时比较那些返回的值,而不是字典本身。
答案 3 :(得分:1)
在python 3中,其他答案不再有效,因为dict.values()
现在返回一个dict视图对象而不是列表。要从视图对象中提取值,我们可以使用iter
和next
的组合:
a.sort(key=lambda dic: next(iter(dic.values())), reverse=True)
答案 4 :(得分:0)
我宁愿使用(或至少要记住).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}]