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

3

我是一名有用的助手,可以为您翻译文本。

我有一个对象列表,需要按其中一个对象属性进行排序。

我可以使用以下代码以升序进行排序:

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

然而,这将按升序对列表进行排序,我需要做的是按降序排序。当对对象列表进行排序时,是否可以实现这一点?


1
operator.attrgetter可能比lambda更有用 - SethMMorton
@SethMMorton 谢谢!已包含在答案中。 - alecxe
2个回答

16
指定 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]

演示(datetime.dates,使用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)]

另一种选择是使用 cmp_to_key 帮助函数并创建自己的对象比较器。 - Luis Masuelli
完美,太好了!只需等待6分钟,然后我就可以接受答案了哈哈。 - Chris Headleand

0

点击链接创建您自己的比较器。您甚至可以按多个属性或复杂逻辑进行比较。

它的工作原理如下:cmp_to_key期望一个函数提供key = cmp_to_key(obj),其中obj是要排序的对象。最后返回实现比较运算符的对象,并且可以用于您可以执行任何自定义比较逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接