Python对象列表,按属性降序排序

3 投票
2 回答
18875 浏览
提问于 2025-04-18 01:11

我有一个对象的列表,我需要根据其中一个对象的属性来排序。

我可以用下面的代码按升序排序:

list1 = sorted(list1, key=lambda object1: object1.fitness)

不过,这段代码是按升序排序的,而我想要的是按降序排序。请问在对对象列表进行排序时,这样做可以吗?

2 个回答

0

查看这个 链接,可以学习如何创建你自己的比较器。你甚至可以通过多个属性或者复杂的逻辑来进行比较。

它的工作原理是这样的:cmp_to_key 需要一个函数,使用 key = cmp_to_key(obj),其中 obj 是你想要排序的对象。最后,它会返回一个实现了比较操作的对象,这样你就可以使用自定义的比较逻辑了。

15

指定 reverse=True 参数:

list1 = sorted(list1, key=lambda object1: object1.fitness, reverse=True)

示例(简单的整数列表):

>>> l = [6, 0, 2, 3, 1, 5, 4]
>>> sorted(l)
[0, 1, 2, 3, 4, 5, 6]
>>> sorted(l, reverse=True)
[6, 5, 4, 3, 2, 1, 0]

示例(使用 operator.attrgetter 而不是 lambda,正如 @SethMMorton 建议的那样,处理日期):

>>> from datetime import date
>>> from operator import attrgetter
>>> l = [date(2014, 4, 11), date(2014, 4, 2), date(2014, 4, 3), date(2014, 4, 8)]

>>> sorted(l, key=attrgetter('day'))
[datetime.date(2014, 4, 2), 
 datetime.date(2014, 4, 3), 
 datetime.date(2014, 4, 8), 
 datetime.date(2014, 4, 11)]
>>> sorted(l, key=attrgetter('day'), reverse=True)
[datetime.date(2014, 4, 11), 
 datetime.date(2014, 4, 8), 
 datetime.date(2014, 4, 3), 
 datetime.date(2014, 4, 2)]

撰写回答