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

在python中使用lambda和regex对列表排序,python,regex,lambda,Python,Regex,Lambda,我想按从最早日期开始的顺序对列表进行排序。我应该如何使用lambda和regex呢 使用您现有的代码,就足以执行以下操作: 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:ResultDat

我想按从最早日期开始的顺序对列表进行排序。我应该如何使用lambda和regex呢

使用您现有的代码,就足以执行以下操作:

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: ........)
(但请不要将
list
用作变量名)

无需将提取的字符串转换为
datetime
,因为它已经采用了自然排序的格式

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

list.sort(key=lambda x: datet.search(x).group(1))
您可以使用(请参见此答案:)解析日期并从字符串中获取日期

def sort_key(line):                                                                                                                                               
    match = datet.search(line)                                                                                                                                               
    if match:                                                                                                                                                     
        return match.group(1)                                                                                                                                                    
    return ''        

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'
]
data.sort(key=sort_key) 

我认为没有任何进口的最简单解决方案是:

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]))
输出:

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)

你为什么有这些奇怪的弦?给定列表的预期输出是什么?很抱歉,原始字符串将“Avoid
list
作为变量名,已经有内置的
list
。yes list不应用作变量名。thnx最后一个字符串的日期偏移量稍有不同。我认为OP的意图是xxxx和YYYY可以是任意长的字符串。在正则表达式模式之前可能还有其他字符串,这会妨碍这里的自然排序。那对我来说是难以捉摸的。谢谢你在这里的精彩表演。虽然列表元素部分是自动生成的,并且不太可能会丢失值,但您的函数在将来会对我有很大帮助,我是python的新手(一般来说也是编程新手)。到目前为止,我还没有使用dateutil。但这似乎很有希望。我会记住这一点。
        ['xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime', 
         'xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime', 
         'yyyyy ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime']