6

我有以下字典列表

a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]

我怎样才能对其进行排序以获得:

a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]

我的意思是,按其字典的值按降序对列表进行排序。

4

5 回答 5

6

除了brandizzi的回答之外,您还可以选择:

sorted(a, key=dict.values, reverse=True)

几乎相同的东西,但可能更惯用。

于 2012-06-06T13:46:25.537 回答
3
>>> sorted(a, key=lambda i: i.values()[0], reverse=True)
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}]
于 2012-06-06T13:45:39.373 回答
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()方法将在排序时比较这些返回值,而不是字典本身。

于 2012-06-06T13:44:52.657 回答
1

在 python 3 中,其他答案不再有效,因为dict.values()现在返回一个 dict 视图对象而不是一个列表。要从视图对象中提取值,我们可以使用iter和的组合next

a.sort(key=lambda dic: next(iter(dic.values())), reverse=True)
于 2018-05-14T17:03:12.340 回答
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}]
于 2012-06-06T13:53:33.527 回答