我有一个航班清单,这些清单将在出发日期前进行排序,然后在总飞行时间上进行排序,并保持其按日期的顺序。


调用出发日期是“飞行”对象的一种方法。
调用飞行持续时间也是“飞行”对象的一种方法。


输出应为:


2017/04/07航班时间:05:00
2017/04/07航班时间:06:00
2017/05/07航班时间:04:00
2017/05/07航班时间:05:00


我试过了:

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


但是methodcaller只接受1个参数。我也尝试了groupby,然后按飞行时间进行排序,但随后列表仅按飞行时间进行了排序。

谢谢

最佳答案

methodcaller不能调用多个方法,其他参数是参数:


  f = methodcaller('name','foo',bar = 1),调用f(b)返回b.name('foo',bar = 1)


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

因此,我将改用简单的lambda(其中xFlight对象):

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

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

10-10 12:53