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

