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

标签 python sorting date python-3.x

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/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/

相关文章:

c - 如何为二维数组的 qsort 编写比较器函数?

python - 如何根据 Python 请求轮换代理

python - 列出 1 Dimensional Python Battleship 中的问题

python - 高效top K PostgreSQL

java - 交换两个数组的值,创建另一个不重复的数组并从最高到最低排序

c# - LINQ to Entities - 比较日期

ruby-on-rails - 如何在 Rails 之外使用 Rails 日期辅助方法?

javascript - 日期的 jQuery val 会导致某些日期为空字符串

python - 带矩阵 block 的三对角矩阵

python - 如何使用 Tika 将 PDF 拆分为段落