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

时间:2020-07-09 07:58:01

标签: 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']

有没有一种方法可以按照最早的日期和时间对列表进行排序,但是可以将Version保留在字符串的开头。

6 个答案:

答案 0 :(得分:3)

排序时,您必须解析datetime子字符串:

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']

答案 1 :(得分:1)

您可以将sorted与自定义键一起使用:

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']

如果日期采用您指定的格式,则无需将其解析为日期时间,按字典顺序就足够了

答案 2 :(得分:0)

您可以将sorted与自定义键一起使用:

list(sorted(my, key=lambda x: x.split(" ", maxsplit=1)[1]))

答案 3 :(得分:0)

import re
from datetime import datetime

sorted(my_list, key=lambda x: datetime.strptime(re.sub(r"Version.", "", x).strip(), "%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']

答案 4 :(得分:0)

这也可以工作:

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

答案 5 :(得分:0)

使用熊猫

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']