[英]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.