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

2024-04-18 08:15:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

但是,这将按升序对列表进行排序,我需要做的是按降序排序。在对对象列表进行排序时,是否可以这样做?


Tags: 对象lambdakey代码列表属性排序sorted
2条回答

看这个link来创建自己的比较器。甚至可以通过多个属性或复杂逻辑进行比较。

它的工作原理如下:cmp-to-u-key需要一个函数给出key = cmp_to_key(obj),其中obj是要排序的对象。最后,返回一个实现comparator运算符的对象,可以使用它来执行任何自定义comparisson逻辑。

指定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而不是@SethMMorton建议的lambda):

>>> 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)]

相关问题 更多 >