我有一个对象列表,我需要按其中一个对象属性进行排序。
我可以使用以下代码按升序排序
list1 = sorted(list1, key=lambda object1: object1.fitness)
但是,这会按升序对列表进行排序,我需要做的是按降序排序。排序对象列表时可以这样做吗?
答案 0 :(得分:11)
指定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)]
答案 1 :(得分:0)
请参阅此link以获得您自己的比较器。您甚至可以通过多个属性或复杂逻辑进行比较。
它的工作原理如下:cmp_to_key期望一个函数给出key = cmp_to_key(obj)
,其中obj
是一个要排序的对象。最后返回一个实现比较器运算符的对象,并且可以使用它来执行任何自定义比较逻辑。