【发布时间】:2016-02-26 20:47:01
【问题描述】:
列表有结构:
test = [{"title": title, "ratio": ratio, "delta": begin - now()}]
需要按比率排序(max->min),然后按delta排序(min->max))?
【问题讨论】:
列表有结构:
test = [{"title": title, "ratio": ratio, "delta": begin - now()}]
需要按比率排序(max->min),然后按delta排序(min->max))?
【问题讨论】:
您可以在排序比较期间使用这两个键的这两个值作为当前字典的代表。
sorted(test, key=lambda x: (-d['ratio'], d['delta']))
将首先根据ratio 的降序对它们进行排序,如果值相等,则将delta 的升序排序。
在这里,我们否定d['ratio'] 的值,因为默认情况下,sorted 确实按升序排序。由于我们希望ratio 的最大值位于开头,因此我们取反该值,以便将最大的ratio 视为最小的ratio。 (例如,在 1、10 和 100 中,取反后,-100 将是最小的)。
我们希望 Python 同时使用 ratio 和 delta。所以,我们在一个元组中返回它们的值。当 Python 比较两个字典时,它以字典对象为参数调用key 函数并获取两个元组,然后将它们进行比较以确定两者中较小的一个。首先比较元组的第一个元素,如果相同,则比较第二个元素。
【讨论】:
就这么简单:
from operator import itemgetter
>>> result = sorted(test, key=itemgetter('-ratio'))
>>> result = sorted(result, key=itemgetter('delta'))
【讨论】: