2024-04-18 08:15:32 发布
网友
我有一个对象列表,需要按其中一个对象属性进行排序。
我可以用下面的代码按升序排序
list1 = sorted(list1, key=lambda object1: object1.fitness)
但是,这将按升序对列表进行排序,我需要做的是按降序排序。在对对象列表进行排序时,是否可以这样做?
看这个link来创建自己的比较器。甚至可以通过多个属性或复杂逻辑进行比较。
它的工作原理如下:cmp-to-u-key需要一个函数给出key = cmp_to_key(obj),其中obj是要排序的对象。最后,返回一个实现comparator运算符的对象,可以使用它来执行任何自定义comparisson逻辑。
key = cmp_to_key(obj)
obj
指定reverse=True参数:
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):
operator.attrgetter
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)]
看这个link来创建自己的比较器。甚至可以通过多个属性或复杂逻辑进行比较。
它的工作原理如下:cmp-to-u-key需要一个函数给出
key = cmp_to_key(obj)
,其中obj
是要排序的对象。最后,返回一个实现comparator运算符的对象,可以使用它来执行任何自定义comparisson逻辑。指定
reverse=True
参数:演示(简单整数列表):
演示(datetime.dates,使用
operator.attrgetter
而不是@SethMMorton建议的lambda
):相关问题 更多 >
编程相关推荐