Skip to main content
 首页 » 编程设计

python之在双数组列表中对日期时间进行排序

2025年05月04日16落叶无声

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

[ 
[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() 适用于命名元组列表,但是否有适用于上述情况的排序函数?

请您参考如下方法:

sorted 将正常工作。它应该按字典顺序对内部列表进行排序。意思是,它将首先比较第一个元素(开始时间),然后如果它们相同,它将比较第二个元素(结束时间)。

>>> 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)) 

会成功的。