2017-12-27 327 views
2

我有一個航班清單,它將在出發日期首先進行排序,然後按航班總航程排序,並根據日期保留其排序。通過多種方法對列表進行排序

  • 調用出發日期是「Flight」對象的一種方法。
  • 調用飛行時間也是「飛行」對象的一種方法。

輸出應該是:

  • 2017年4月7日flighttime:05:00
  • 2017年4月7日flighttime:06:00
  • 2017年5月7日flighttime:04 :00
  • 2017年5月7日flighttime:05:00

我想:

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

但methodcaller只需要1個參數。我先嚐試了groupby,然後在飛行時間進行排序,但是這個列表只能按飛行時間排序。

謝謝

回答

2

methodcaller不能調用超過1點的方法,其他的參數是參數:

F = methodcaller( '名', '富',酒吧= 1),調用F (二)返回b.name( '富',酒吧= 1)

因此,它可以使用methodcaller但在一個更加複雜的方式可能涉及lambda像(未經測試)lambda x : methodcaller('name')(x),methodcaller('flighttime')(x)

進行

所以我會用一個簡單的lambda代替(其中xFlight對象):

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

謝謝!如果我想維護日期順序,但是要顛倒飛行時間順序?因此只能在第二個鍵上換向? – Ward

+0

如果飛行時間是數值,你可以倒過來第二個鍵:'sorted(flights,key = lambda x:(x.date(), - x.flighttime()))' –

+0

不是它是一個timedelta,但它工作通過放在前面!謝謝 – Ward

相關問題