【问题标题】:python object list, sort in descending order based on object attributepython对象列表,根据对象属性降序排序
【发布时间】:2014-04-03 14:56:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • operator.attrgetter 代替 lambda 也可能有用
  • @SethMMorton 谢谢!包含在答案中。

标签: python sorting


【解决方案1】:

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

【讨论】:

  • 另一种选择是使用 cmp_to_key 辅助函数并创建自己的对象比较器
  • 完美,干杯!只需要等6分钟我才能接受答案哈哈
【解决方案2】:

查看此link 以创建您自己的比较器。您甚至可以按多个属性或复杂逻辑进行比较。

它是这样工作的: cmp_to_key 期望一个函数给出key = cmp_to_key(obj) 其中obj 是一个要排序的对象。最后返回一个实现比较器操作符的对象,可以使用它来执行任何自定义比较逻辑。

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2022-01-11
    • 2022-01-05
    • 2019-02-11
    相关资源
    最近更新 更多