在双数组列表中排序日期时间

时间:2014-03-12 06:34:31

标签: python python-2.7

我有一个日期时间列表,其中包含多个[开始时间,结束时间]组合。如何有效地根据开始时间对列表进行排序?

[
[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()和attrgetter()适用于namedtuple列表,但是有没有适用于上述场景的排序函数?

1 个答案:

答案 0 :(得分: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))

会做到这一点。