Python: 用lambda对字符串格式的日期时间排序

3 投票
2 回答
5125 浏览
提问于 2025-04-18 09:27

我正在使用 sorted(response, key=lambda k: k['createDate'], reverse=False) 这个方法来把最新的列表成员排到前面。问题是我的日期时间是以字符串格式表示的,格式是 %Y-%m-%d %I:%M:%S %p。如果我这样排序,它会按照字符串的比较来排序,而不是按照日期时间的比较。请问我该怎么解决这个问题呢?

补充说明:我使用的是 Python 3.4。

2 个回答

2

在你的关键函数中解析结果就可以了,像这样做应该没问题:

import datetime
def parse_timestamp_from_response(response):
    return datetime.datetime.strptime(response['createDate'], '%Y-%m-%d %I:%M:%S %p')

sorted(response, key=parse_timestamp_from_response, reverse=False)
5

你需要把你的值解析成日期时间对象,这样才能在你的关键函数中使用:

from datetime import datetime

sorted(
    response,
    key=lambda k: datetime.strptime(k['createDate'], '%Y-%m-%d %I:%M:%S %p'),
    reverse=True,
)

如果你的日期格式稍微有点不同,你可以直接用字符串排序;ISO8601格式的日期(格式为'%Y-%m-%d %H:%M:%S')是可以按字典顺序排序的。

我还改变了排序的顺序;你需要把顺序反过来,最新的datetime值会比之前的值要

>>> datetime(2014, 6, 11, 17, 16, 10) > datetime(2008, 9, 15, 12, 00, 00)
True

所以如果你不反转排序,最新的值会被排到最后。

撰写回答