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
相关产品推荐
相关产品推荐

