gpt4 book ai didi

python - 如何在嵌套列表中使用 dateutil?

转载 作者:太空宇宙 更新时间:2023-11-04 03:15:36 26 4
gpt4 key购买 nike

r = [['21-09-1995', 3], ['22-11-1995', 2] , ['07-01-1988', 6], ['test', 4], ['12-12-2001', 5]]

有谁知道如何在嵌套列表中使用 dateutil?我尝试了这个但没有成功:

from dateutil.parser import parse
r = sorted(r, key=parse)

错误:'list' 对象没有属性 'read'

我知道还有其他方法可以对日期进行排序,但我喜欢 dateutils 的一点是它可以在不指明格式的情况下识别日期。体育21/09/199521-09-1995 被视为日期。

预期输出:

r = [['test', 4], ['07-01-1988', 6], ['21-09-1995', 3], ['22-11-1995', 2],  ['12-12-2001', 5]]

r = [['07-01-1988', 6], ['21-09-1995', 3], ['22-11-1995', 2],  ['12-12-2001', 5], ['test', 4]]

最佳答案

这个有效:

from datetime import datetime
from dateutil.parser import parse

def my_parse(lis):
try:
return parse(lis[0])
except ValueError:
return datetime(1, 1, 1)

print(sorted(r, key=my_parse))

输出:

[['test', 4], ['07-01-1988', 6], ['21-09-1995', 3], ['22-11-1995', 2], ['12-12-2001', 5]]

您需要将子列表的第一个条目提供给 parse()。条目 test 不可解析并触发 ValueError。捕获它并返回一个超出您期望的日期范围的日期时间对象。

使用:

return datetime(9999, 1, 1)

如果您希望带有 test 的条目作为排序结果中的最后一个。

编辑

如果您希望它与平面嵌套列表一起使用,您可以检查条目是否为字符串:

r = ['test',  '21-09-1995 wednesday', '07-01-1988 tuesday'] 

from datetime import datetime
from dateutil.parser import parse

def my_parse(value):
try:
if isinstance(value, str):
return parse(value)
else:
return parse(value[0])
except ValueError:
return datetime(1, 1, 1)

print(sorted(r, key=my_parse))

这假定 value 是一个包含字符串的可迭代对象或一个字符串。

关于python - 如何在嵌套列表中使用 dateutil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36399477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com