我有一个日期时间列表,其中包含多个[开始时间,结束时间]组合.如何有效地根据开始时间对列表进行排序?
[
[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)],
]
Run Code Online (Sandbox Code Playgroud)
我知道sorted()和attrgetter()适用于namedtuple列表,但是有没有适用于上述场景的排序函数?
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)]]
Run Code Online (Sandbox Code Playgroud)
如果你需要它(你可能会),你可以指定一个关键功能.假设您根本不关心结束时间,只想按开始时间排序(如果多个记录具有相同的开始时间,则无论终止时间如何都保留原始顺序):
sorted(data, key=operator.itemgetter(0))
Run Code Online (Sandbox Code Playgroud)
会做的伎俩.