如何在Python中对字典列表进行多重排序?

5 投票
2 回答
541 浏览
提问于 2025-05-11 00:02

这个列表的结构是:

test = [{"title": title, "ratio": ratio, "delta": begin - now()}]

需要先按比例从大到小排序,然后再按差值从小到大排序,对吗?

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

3

简单来说就是:

from operator import itemgetter

>>> result = sorted(test, key=itemgetter('-ratio'))
>>> result = sorted(result, key=itemgetter('delta'))
9

你可以用这两个键的值来代表当前字典,在排序时进行比较。

sorted(test, key=lambda x: (-x['ratio'], x['delta']))

这样会先根据 ratio 的值从大到小排序,如果 ratio 的值相同,再根据 delta 的值从小到大排序。


这里我们把 d['ratio'] 的值取反,因为默认情况下,sorted 是从小到大排序的。我们想让最大的 ratio 在最前面,所以取反后,最大的 ratio 就会被当作最小的 ratio 来处理。(比如说在1、10和100中,取反后,-100是最小的)。

我们希望 Python 同时使用 ratiodelta。所以,我们把这两个值放在一个元组里返回。当 Python 比较两个字典时,它会用字典对象作为参数调用 key 函数,得到两个元组,然后比较这两个元组,确定哪个更小。首先比较元组的第一个元素,如果相同,再比较第二个元素。

撰写回答