说这是我的值列表:
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保留在字符串的开头。
答案 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']