You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中对日期字符串排序:优先不使用日期对象

按日历顺序排序日期字符串列表

要处理这种格式为“月份 日期数字”的字符串列表排序,Python没有直接的内置方法能一步到位,但我们可以通过自定义排序键轻松实现,这里有两种靠谱的方案:

方案一:使用datetime模块(推荐)

借助datetime的日期解析功能,把字符串转换成可比较的datetime对象作为排序依据,这是最通用、不易出错的方法:

首先导入模块,然后用sorted()函数配合lambda表达式生成排序键:

from datetime import datetime

dates = ['March 1', 'March 9', 'April 14', 'March 12']
sorted_dates = sorted(dates, key=lambda date_str: datetime.strptime(date_str, '%B %d'))

print(sorted_dates)
# 输出: ['March 1', 'March 9', 'March 12', 'April 14']
  • %B对应完整的英文月份名(比如"March"),%d对应日期数字(单/双位数都能自动解析)
  • datetime对象本身支持比较运算,所以sorted()会自动按日历顺序排列

方案二:手动构建月份映射

如果不想依赖datetime模块,可以自己定义一个月份到数字的映射字典,把每个日期字符串拆分成「月份数字+日期数字」的元组作为排序键:

month_map = {
    'January': 1, 'February': 2, 'March': 3,
    'April': 4, 'May': 5, 'June': 6,
    'July': 7, 'August': 8, 'September': 9,
    'October': 10, 'November': 11, 'December': 12
}

dates = ['March 1', 'March 9', 'April 14', 'March 12']
sorted_dates = sorted(
    dates,
    key=lambda date_str: (month_map[date_str.split()[0]], int(date_str.split()[1]))
)

print(sorted_dates)
# 输出同样正确

这种方法的缺点是需要手动维护月份映射,如果遇到非英文月份名就失效,所以只适合固定场景。


内容的提问来源于stack exchange,提问作者HunBurry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:20:41