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)
错误:“列表”对象没有属性“读取”
我知道还有其他方法对日期进行排序,但我喜欢 dateutils 的一点是它可以识别日期而不指示格式。体育运动21/09/1995
和 21-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/