我有一个日期时间列表,其中包含多个[开始时间,结束时间]组合。如何有效地根据开始时间对列表进行排序?
[
[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列表,但是有没有适用于上述场景的排序函数?
答案 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))
会做到这一点。