如何在python中多重排序字典列表?

How to multisort list of dictionaries in Python?

本问题已经有最佳答案,请猛点这里访问。

列表具有结构:

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

需要按比率(max->min)排序,然后按delta(min->max)排序?


在排序比较期间,可以使用这两个键的这两个值作为当前字典的代表。

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

将首先根据ratio的降序对其进行排序,如果值相等,则按照delta的升序对其进行排序。

这里,我们否定了EDOCX1的值(2),因为默认情况下,sorted按升序排序。由于我们希望EDOCX1的最大值(0)在开始时出现,因此我们将该值取反,以便最大的ratio将被视为最小的ratio。(例如,在1、10和100中,取负值后,-100将是最小的)。

我们希望python同时使用ratiodelta。所以,我们返回它们在元组中的值。当python比较两个字典时,它调用key函数,其中dictionary对象作为参数,得到两个元组,并将它们进行比较以确定两者中的较小值。首先,它比较元组的第一个元素,如果它们相同,那么将比较第二个元素。


简单如:

1
2
3
4
from operator import itemgetter

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