如何在Python中按日期时间对列表进行排序?

7

我正在编写一个.py文件,用于按时间对包含以下信息的列表进行排序

日期、时间、员工编号、执行的操作

在stackoverflow上有一个关于此问题的提问,但我无法完全理解(我刚开始学习Python)

我还查阅了sort函数和datetime库,但是无法使其正常运行。

list = 
[
('2017/09/10 13:19:38', 'employee_id', 'enrolled'),
('2017/09/10 12:15:21', 'employee_id', 'deleted'),
('2017/09/10 21:19:34', 'employee_id', 'enrolled'),
('2017/09/10 22:42:50', 'employee_id', 'deleted'),
('2017/09/10 16:53:03', 'employee_id', 'enrolled')
]

我只想知道哪个动作先执行了。 有人能帮我吗?


1
在您的情况下,使用这种日期格式(暗示为yyyy/mm/dd),简单的list.sort()就可以完成任务。 - Klaus D.
你尝试了什么? - Kenny Ostrom
1
我也尝试了排序函数和日期时间库,但无法使其正常工作。请展示你所尝试的代码。如果你只是告诉我们你尝试过某些东西,而没有展示实际的代码,我们就无法指出你哪里做错了。 - John Gordon
为了您的利益,请不要覆盖内置的 list。这样做会导致您无法再使用 list 函数。 - Jab
谢谢您的回答。当我运行'print list.sort()'时,它返回'None',这样做对吗? - Ebenezer Isaac
list.sort()会对列表进行排序并返回Nonesorted(list)会保留原始列表,但返回一个新的已排序列表。 - Klaus D.
3个回答

12
from datetime import datetime
list = 
[
('2017/09/10 13:19:38', 'employee_id', 'enrolled'),
('2017/09/10 12:15:21', 'employee_id', 'deleted'),
('2017/09/10 21:19:34', 'employee_id', 'enrolled'),
('2017/09/10 22:42:50', 'employee_id', 'deleted'),
('2017/09/10 16:53:03', 'employee_id', 'enrolled')
]
sorted_list = sorted(list, key=lambda t: datetime.strptime(t[0], '%Y/%m/%d %H:%M:%S'))

使用sorted函数的key参数,告诉函数将每个元组的第一个元素解析为带有格式'%Y/%m/%d %H:%M:%S'的日期时间字符串,并使用该值进行排序。


4

试试这个:

sorted_list = sorted( list )

=)


2
在这种情况下,一个简单的list.sort()可以原地排序列表,或者sorted(list)可以返回已排序列表的副本 - 只要日期和时间遵循Y/M/D H/M/S格式即可完美工作。
要在一行中获取第一个执行的操作,您可以使用:
first_action = sorted(list)[0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接