我有一个航类列表,首先按出发日期排序,然后按总飞行时间排序,根据日期保持顺序。
- 调用出发日期是“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/