Python: 用lambda对字符串格式的日期时间排序
我正在使用 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
所以如果你不反转排序,最新的值会被排到最后。