通过比较日期时间对列表进行排序

时间:2017-10-25 08:31:25

标签: python list sorting datetime

有一个由时间和查询组成的列表,例如:

data = [['bbb', '2017-10-24 07:23:02'], 
        ['ccc', '2017-10-24 11:01:00'], 
        ['aaa', '2017-10-24 16:13:32']]

我想按时间排序。查询和时间都是字符串类型。我怎么能意识到它?

我把它转换为

[['aaa', 16,13,32],
 ['bbb', 7,23,2],
['ccc', 11,1,0],...] 
不管那一天,所有的日子都是一样的。

2 个答案:

答案 0 :(得分:1)

在这种情况下,排序也适用于字符串对应项。但是,我想为任何感兴趣的人提供更规范的版本。

来自pandas模块的

pd.to_datetime是大多数datetime相关操作的goto方法,因为猜测日期格式有多好。

>>> import pandas as pd
>>> data = [['bbb', '2017-10-24 07:23:02'], 
            ['ccc', '2017-10-24 11:01:00'], 
            ['aaa', '2017-10-24 16:13:32']]  
>>> sorted(data, key=lambda x: pd.to_datetime(x[1]))

给出了:

[['bbb', '2017-10-24 07:23:02'], 
 ['ccc', '2017-10-24 11:01:00'], 
 ['aaa', '2017-10-24 16:13:32']]

您还可以使用内置dateutil.parser来推断日期时间格式:

>>> import dateutil.parser
>>> sorted(data, key=lambda x: dateutil.parser.parse(x[1]))

这给出了相同的结果。

如果您在没有传递格式的情况下陷入无法转换的位置,请使用datetime.strptime并明确传递格式字符串。

答案 1 :(得分:0)

datetime个对象实现了< ,> =等逻辑运算符。
所以我建议将字符串转换为datetime对象以对它们进行排序:

from datetime import datetime

data = [
        ['aaa', '2017-10-24 16:13:32'],
        ['bbb', '2017-10-24 07:23:02'],
        ['ccc', '2017-10-24 11:01:00']
]


sorted_dates = sorted(data, key= lambda x: datetime.strptime(
                                            x[1], "%Y-%m-%d %H:%M:%S")
)

print(sorted_dates)