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

Python实现按月份实际顺序排序元组列表的方法求助

解决按实际月份顺序排序假期列表的问题

这个问题太贴合日常需求了——按月份缩写的字母排序完全不符合我们对时间顺序的认知,咱们只需要给月份建立一个数字映射,再调整排序的key就搞定啦!

具体步骤:

  1. 创建月份缩写到数字的映射字典:把每个月份的缩写对应到它的实际月份序号,这样就能把字符串形式的月份转换成可用于排序的数字。
  2. 修改排序的key逻辑:不再直接用月份字符串排序,而是先把月份缩写转成对应的数字,再结合日期组成排序键,这样排序时会先按月份数字,再按日期,完全符合时间顺序。

完整代码示例:

# 定义月份缩写到实际序号的映射
month_order = {
    'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4,
    'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8,
    'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12
}

holidays = [('Easter', ('Apr', 1), 0), ('Earth Day', ('Apr', 22), 0), ('Pearl Harbor Rememberance Day', ('Dec', 7), 0), ('Christmas Day', ('Dec', 25), 50), ('Groundhog Day', ('Feb', 2), 0)]

def holiday1(holidays : [(str,(str,int),int)]) -> [(str,(str,int),int)]:
    # 排序key先取月份对应的数字,再取日期
    return sorted(holidays, key=lambda x: (month_order[x[1][0]], x[1][1]))

# 测试一下排序结果
sorted_holidays = holiday1(holidays)
for holiday in sorted_holidays:
    print(holiday)

运行结果:

('Groundhog Day', ('Feb', 2), 0)
('Easter', ('Apr', 1), 0)
('Earth Day', ('Apr', 22), 0)
('Pearl Harbor Rememberance Day', ('Dec', 7), 0)
('Christmas Day', ('Dec', 25), 50)

这样排序后的结果就完全按照实际的时间顺序来了:2月→4月→12月,同月份内也按日期从小到大排列,完美符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:28:09