繁体   English   中英

根据名称和日期时间对嵌套列表进行排序 object

[英]Sort nested list based on name and datetime object

我有一个嵌套的字符串格式,比如

lis = [
    ["val1", "2018-06-29 08:15:27"], 
    ["val2", "2018-06-29 08:15:27"], 
    ["val2", "2019-06-29 08:15:27"]
    ]

我想根据“名称”( index[0] )进行排序,然后如果“名称”相同,则应根据日期( index[1] )进行排序。

我尝试过的代码:


    sorted(list, key=lambda x: (x[0], -x[1]))

您应该只在 int(x[3:]) 的 val 字符串之后对 integer 数字进行排序。 对于日期排序,您应该将其转换为日期时间。 以下代码段应根据需要进行排序。

    sorted(lis,key=lambda x: (int(x[0][3:]),datetime.strptime(x[1], '%Y-%m-%d %H:%M:%S')))

只需将日期字符串转换为日期时间,如下所示,并使用排序。 排序后的 function 将自动按子列表中的第一项排序,然后按第二项打破平局:

import datetime
sorted([[x[0],datetime.datetime.strptime(x[1], '%Y-%m-%d %H:%M:%S')] for x in lis])

请注意,在对字符串进行排序时,您应该期望按字典顺序。

对于这种情况,您可以尝试三元运算符:

sorted(lis, key = lambda x: x[1] if x[0] == x[1] else x[0])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM