Python实现按月份实际顺序排序元组列表的方法求助
解决按实际月份顺序排序假期列表的问题
这个问题太贴合日常需求了——按月份缩写的字母排序完全不符合我们对时间顺序的认知,咱们只需要给月份建立一个数字映射,再调整排序的key就搞定啦!
具体步骤:
- 创建月份缩写到数字的映射字典:把每个月份的缩写对应到它的实际月份序号,这样就能把字符串形式的月份转换成可用于排序的数字。
- 修改排序的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
相关产品推荐
相关产品推荐

