python - 多种方法对列表进行排序

标签 python sorting methods

我有一个航类列表,首先按出发日期排序,然后按总飞行时间排序,根据日期保持顺序。

  • 调用出发日期是“Flight”对象的一个​​方法。
  • 调用飞行时长也是“Flight”对象的一个​​方法。

输出应该是:

  • 2017年7月4日飞行时间:05:00
  • 2017年7月4日飞行时间:06:00
  • 2017年7月5日飞行时间:04:00
  • 2017-05-07 飞行时间:05:00

我尝试过:

sorted(flights, key=methodcaller('date','flighttime'))

但方法调用者只接受 1 个参数。我也尝试先进行分组,然后按飞行时间排序,但随后列表仅按飞行时间排序。

谢谢

最佳答案

methodcaller 不能调用超过 1 个方法,其他参数均为​​参数:

f = methodcaller('name', 'foo', bar=1), the call f(b) returns b.name('foo', bar=1)

因此可以使用 methodcaller 来完成,但以更复杂的方式可能涉及 lambda 像(未经测试)lambda x : methodcaller('name')( x),methodcaller('flighttime')(x)

所以我会使用一个简单的lambda来代替(其中x是一个Flight对象):

sorted(flights, key=lambda x : (x.date(),x.flighttime()))

关于python - 多种方法对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47995001/

相关文章:

C++ std::sort 具有相同的参数

c# - 发送 HTML 参数和文件路径参数?

C# 为什么其中一些使用委托(delegate)和泛型的方法没有启动?

Python3 Crypto.Hash - SHA 摘要总是以二进制 1 开头

python - Luigi 没有选择下一个要运行的任务,剩下一堆待处理的任务,没有失败的任务

python - 我到底如何(以及为什么)可以通过 numpy.random 访问所有 NumPy?

java - 对对象数组列表中的整数进行排序

python - 以相反顺序对 4D 数组的每一列进行排序

python - 变量初始化时收到 "UnboundLocalError: local variable ' e'赋值前引用"

methods - 如何在 Rust 中将对象用作其自身方法的参数?