如何在Python中对字典列表进行多重排序?
这个列表的结构是:
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 同时使用 ratio
和 delta
。所以,我们把这两个值放在一个元组里返回。当 Python 比较两个字典时,它会用字典对象作为参数调用 key
函数,得到两个元组,然后比较这两个元组,确定哪个更小。首先比较元组的第一个元素,如果相同,再比较第二个元素。