2014-03-12 87 views
1

我有一個日期時間列表與多個[開始時間,結束時間]組合。我如何有效地根據開始時間對列表進行排序?在雙數組列表中排序日期時間

[ 
[datetime.datetime(2013, 1, 2, 14, 0), datetime.datetime(2013, 1, 2, 16, 0)], 
[datetime.datetime(2013, 1, 1, 9, 0), datetime.datetime(2013, 1, 1, 10, 0)],     
[datetime.datetime(2013, 1, 1, 12, 0), datetime.datetime(2013, 1, 1, 16, 0)], 
] 

我知道排序()和attrgetter()可以很好地用於namedtuple名單,但沒有任何排序功能,適用於上述情況?

回答

6

sorted將工作得很好。它應該按照字典順序排列內部列表。意思是,它會首先比較第一個元素(starttime),然後如果這些元素是相同的,它會比較第二個元素(endtime)。

>>> data 
[[datetime.datetime(2013, 1, 2, 14, 0), datetime.datetime(2013, 1, 2, 16, 0)], [datetime.datetime(2013, 1, 1, 9, 0), datetime.datetime(2013, 1, 1, 10, 0)], [datetime.datetime(2013, 1, 1, 12, 0), datetime.datetime(2013, 1, 1, 16, 0)]] 
>>> sorted(data) 
[[datetime.datetime(2013, 1, 1, 9, 0), datetime.datetime(2013, 1, 1, 10, 0)], [datetime.datetime(2013, 1, 1, 12, 0), datetime.datetime(2013, 1, 1, 16, 0)], [datetime.datetime(2013, 1, 2, 14, 0), datetime.datetime(2013, 1, 2, 16, 0)]] 

如果你需要它(你可能會),你可以指定一個關鍵功能。說你根本就不關心結束時間,只有想開始時間排序(保留原來的順序不分結束時間,如果多個記錄具有相同的開始時間):

sorted(data, key=operator.itemgetter(0)) 

會做的伎倆。

+0

這真棒,我不知道排序()將做的伎倆! – twfx