Python -Есть ли способ отсортировать список строк, содержащих дату и время в - PullRequest
2 голосов
/ 09 июля 2020

Скажите, что это мой список значений:

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

Есть ли способ отсортировать список по самой ранней дате и времени, но сохраняя версию в начале строка.

Ответы [ 6 ]

3 голосов
/ 09 июля 2020

Вам нужно будет проанализировать подстроку 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 голос
/ 09 июля 2020

Вы можете использовать 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']

Если дата находится в указанном вами формате, вам не нужно анализировать ее как datetime, достаточно лексикографического порядка

0 голосов
/ 09 июля 2020

используя pandas

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']
0 голосов
/ 09 июля 2020

Это тоже может сработать:

print sorted(l, key=lambda x: int("".join([i for i in x if i.isdigit()])))
0 голосов
/ 09 июля 2020
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']
0 голосов
/ 09 июля 2020

Вы можете использовать sorted с настраиваемым ключом:

list(sorted(my, key=lambda x: x.split(" ", maxsplit=1)[1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...