在python中使用lambda和regex对列表排序

2024-09-29 02:17:35 发布

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

list = ['xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime', 'xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime', 'yyyyy' ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime]

datet = re.compile(r'ResultDatetime:(\d{4}-\d{2}-\d{2} \d{2}:\d{2})')

list.sort(key = lambda x: ........)

我想从最早的日期开始排序。我应该如何使用lambda和regex来实现呢?在


Tags: lambdakeyre排序sortlistregexcompile
3条回答

您可以使用^{}(请参阅这个答案:Parse date strings?)来解析日期,^{}可以从字符串中获取日期

import re     
from dateutil.parser import parse

list = ['xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime', 'xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime', 'yyyyy ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime]
datet = re.compile(r'ResultDatetime:(\d{4}-\d{2}-\d{2} \d{2}:\d{2})')

list.sort(key = lambda x : parse(re.findall(datet, x)[0]))

有了代码,就可以:

list.sort(key=lambda x: datet.search(x).group(1))

(但请不要使用list作为变量名)。在

不需要将提取的字符串转换为datetime,因为它已经是自然排序的格式。在

但是请注意,如果任何字符串与正则表达式不匹配,则会生成一个错误,因此最好将密钥拆分为一个命名的多行函数,并在返回匹配的组之前测试匹配是否成功。在

^{pr2}$

我认为最简单的解决办法是:

data  = ['xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime',
         'xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime', 
         'yyyyy ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime']

sorted_data = sorted(data, key=lambda x: x[20:36])

print(sorted_data)

输出:

^{pr2}$

相关问题 更多 >