使用lis中包含的特定字符串对一个列表进行排序

2024-03-29 07:58:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须根据月份名称对字符串列表进行排序:

my_list = ['apple_april', 'banana_july', 'carrot_december', 'dog_january']

我必须在一月,二月,马尔奇。。。。。你知道吗

我的审判:

months = [m.split('_')[1] for m in my_list]

ans = [x for (y,x) in sorted(zip(months,my_list))]

但是没有成功,你会怎么做呢?你知道吗

预期的答案是:

['dog_january', 'apple_april', 'banana_july', 'carrot_december']

Tags: in名称appleformyjulylistbanana
3条回答

你可以把月份和它们在日历中的相应位置编成字典:

months = {'january': 1,
          'april': 4,
          'july': 7,
          'december': 12}

然后通过在字典中查找月份对列表进行排序。首先在下划线上拆分列表的每个元素(它给出一个列表,如['dog', 'january']),然后使用months.get在字典中查找此列表的最后一个元素:

>>> sorted(my_list, key=lambda x: months.get(x.split('_')[-1]))
['dog_january', 'apple_april', 'banana_july', 'carrot_december']

编辑:

如果你已经安装了dateutil,这是一种更懒惰的方法。。。你知道吗

>>> import dateutil
>>> sorted(my_list, key=lambda x: dateutil.parser.parse(x.split('_')[-1]))
['dog_january', 'apple_april', 'banana_july', 'carrot_december']

不需要字典!dateutil.parser.parse将月份字符串解析为datetime对象。你知道吗

>>> from datetime import datetime
>>> my_list = ['apple_april', 'banana_july', 'carrot_december', 'dog_january']
>>> sorted(my_list, key=lambda x: datetime.strptime(x.split('_')[1], '%B'))
['dog_january', 'apple_april', 'banana_july', 'carrot_december']

^{}^{}接受可选的key参数。传递一个键函数,将相应的数字返回给monthes。你知道吗

>>> import calendar
>>>
>>> months = {calendar.month_name[i].lower(): i for i in range(1, 12+1)}
>>> my_list = ['apple_april', 'banana_july', 'carrot_december', 'dog_january']
>>> sorted(my_list, key=lambda x: months[x.split('_')[1]])
['dog_january', 'apple_april', 'banana_july', 'carrot_december']

months是使用^{}在月份名称和数字之间进行映射:

>>> months
{'april': 4, 'november': 11, 'june': 6, 'august': 8, 'december': 12, 'october': 10,
 'july': 7, 'march': 3, 'september':9, 'may': 5, 'january': 1, 'february': 2}

相关问题 更多 >