2014-03-12 31 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