Python—有没有一种方法可以对包含日期和时间的字符串列表进行排序

Python—有没有一种方法可以对包含日期和时间的字符串列表进行排序,python,python-3.x,list,loops,datetime,Python,Python 3.x,List,Loops,Datetime,假设这是我的值列表: my_list=['Version1 2016,03,12 22:30','Version2 2016,03,29 23:00','Version3 2016,04,07 16:00','Version4 2016,02,24 15:00'] 是否有一种方法可以按最早的日期和时间对列表进行排序,但要将版本保留在字符串的前面。排序时必须解析日期时间子字符串: from datetime import datetime sorted(my_list, key=lambda x

假设这是我的值列表:

my_list=['Version1 2016,03,12 22:30','Version2 2016,03,29 23:00','Version3 2016,04,07 16:00','Version4 2016,02,24 15:00']


是否有一种方法可以按最早的日期和时间对列表进行排序,但要将版本保留在字符串的前面。

排序时必须解析日期时间子字符串:

from datetime import datetime

sorted(my_list, key=lambda x: datetime.strptime(x.split(maxsplit=1)[1], '%Y,%m,%d %H:%M'))

['Version4 2016,02,24 15:00',
 'Version1 2016,03,12 22:30',
 'Version2 2016,03,29 23:00',
 'Version3 2016,04,07 16:00']

您可以将排序后的
与自定义键一起使用:

list(sorted(my_list, key=lambda x: x.split(" ", maxsplit=1)[1])
['Version4 2016,02,24 15:00',
 'Version1 2016,03,12 22:30',
 'Version2 2016,03,29 23:00',
 'Version3 2016,04,07 16:00']
list(sorted(my, key=lambda x: x.split(" ", maxsplit=1)[1]))

如果日期是您给定的格式,则不需要将其解析为日期时间,字典顺序就足够了

您可以使用带有自定义键的
排序

list(sorted(my_list, key=lambda x: x.split(" ", maxsplit=1)[1])
['Version4 2016,02,24 15:00',
 'Version1 2016,03,12 22:30',
 'Version2 2016,03,29 23:00',
 'Version3 2016,04,07 16:00']
list(sorted(my, key=lambda x: x.split(" ", maxsplit=1)[1]))
输出:

['Version4 2016,02,24 15:00',
 'Version1 2016,03,12 22:30',
 'Version2 2016,03,29 23:00',
 'Version3 2016,04,07 16:00']

这也可以奏效:

print sorted(l, key=lambda x: int("".join([i for i in x if i.isdigit()])))
使用熊猫

import pandas as pd
data = ['Version1 2016,03,12 22:30', 'Version2 2016,03,29 23:00', 'Version3 2016,04,07 16:00', 'Version4 2016,02,24 15:00']
df = pd.DataFrame(data)
df = pd.concat([df, df[0].str.split(" ", n=1, expand=True)], axis=1)
df.columns = ["text","version","timestamp"]
df.timestamp = pd.to_datetime(df.timestamp, format="%Y,%m,%d %H:%M")
df.sort_values("timestamp")["text"].tolist()    
输出

['Version4 2016,02,24 15:00',
 'Version1 2016,03,12 22:30',
 'Version2 2016,03,29 23:00',
 'Version3 2016,04,07 16:00']

排序已返回一个列表。你不是在解析日期,你是在快速地对字符串进行排序,这根本不会对日期进行排序…我以为排序会给出一个迭代器,你是对的,它是不需要的。如果日期格式是年、月、日、时间,字典顺序正确是它返回列表,实际上我认为它应该不强制转换为datetime是。但是可能更容易出错,例如如果月份字段可以是
9
11
,那么为什么会有两个相同的答案?我在移动应用程序上编辑了答案,它创建了另一个我无法删除的答案。。。