2014-04-03 196 views
2

我有一个对象列表,我需要通过其中一个对象属性进行排序。python对象列表,根据对象属性降序排列

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

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

然而,这种由升序排序列表,我需要做的是降序排序。排序对象列表时,这可能吗?

+1

operator.attrgetter而不是lambda也可能有用 – SethMMorton

+0

@SethMMorton谢谢!包括在答案中。 – alecxe

回答

10

指定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)] 
+0

另一种选择是使用cmp_to_key帮助函数并创建自己的对象比较器 –

+0

完美,欢呼!我只需要等6分钟才能接受答案哈哈 –

0

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

它的工作原理是这样的:cmp_to_key预计即给出key = cmp_to_key(obj)其中obj是要排序的对象。最后,返回一个实现比较运算符的对象,并且可以使用它来执行任何自定义比较逻辑。

相关问题