如何在 Python 中对字典列表进行多重排序? [复制]
Posted
技术标签:
【中文标题】如何在 Python 中对字典列表进行多重排序? [复制]【英文标题】:How to multisort list of dictionaries in Python? [duplicate] 【发布时间】:2016-02-26 20:47:01 【问题描述】:列表有结构:
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
的升序排序。
在这里,我们否定d['ratio']
的值,因为默认情况下,sorted
确实按升序排序。由于我们希望ratio
的最大值位于开头,因此我们取反该值,以便将最大的ratio
视为最小的ratio
。 (例如,在 1、10 和 100 中,取反后,-100 将是最小的)。
我们希望 Python 同时使用 ratio
和 delta
。所以,我们在一个元组中返回它们的值。当 Python 比较两个字典时,它以字典对象为参数调用key
函数并获取两个元组,然后将它们进行比较以确定两者中较小的一个。首先比较元组的第一个元素,如果相同,则比较第二个元素。
【讨论】:
【参考方案2】:就这么简单:
from operator import itemgetter
>>> result = sorted(test, key=itemgetter('-ratio'))
>>> result = sorted(result, key=itemgetter('delta'))
【讨论】:
以上是关于如何在 Python 中对字典列表进行多重排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中对存储在字典中的 IP 地址进行排序?