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

如何在Python中按月份与日期对含姓名的字符串列表排序?

解决方案

你可以通过提取每个字符串里的月份和日期作为排序依据,用Python的sorted()函数来实现需求。具体实现方式如下:

  • 先定义月份缩写到数字的映射,把月份转换成可用于排序的数值
  • 给sorted()函数指定自定义排序键,优先按月份数字排序,再按日期数字排序

修改后的完整代码:

class Example(models.Model):
    _inherit = 'sorting.example'

    def unable_to_sort(self):
        data_list = ['Abigail Peterson Jan 25','Paul Williams Feb 1','Anita Oliver Jan 24','Ernest Reed Jan 28']
        # 定义12个月份缩写对应的数字映射
        month_map = {
            'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4,
            'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8,
            'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12
        }
        # 生成排序键:先按月份数字,再按日期整数排序
        sorted_list = sorted(data_list, key=lambda x: (
            month_map[x.split()[-2]], 
            int(x.split()[-1])
        ))
        # 可选:如果同月份同日期需要按姓名排序,可添加姓名作为第三排序依据
        # sorted_list = sorted(data_list, key=lambda x: (
        #     month_map[x.split()[-2]], 
        #     int(x.split()[-1]),
        #     ' '.join(x.split()[:-2])
        # ))
        self.update({'list_of_birthday_week': ','.join(r for r in sorted_list)})

代码说明

  • x.split()[-2] 提取字符串末尾第二位的月份缩写,x.split()[-1] 提取最后一位的日期字符串,转成整数后作为次级排序依据
  • 排序逻辑是:先按月份数字从小到大排列,同月份的条目再按日期从小到大排列
  • 注释部分是扩展逻辑,如果遇到同月份同日期的情况,可以加上姓名排序规则,确保结果的稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:25:18