Python按时间间隔排序

1 投票
4 回答
3504 浏览
提问于 2025-04-16 08:38

我有一堆记录,我需要计算时间差(最新时间 - 创建时间)。我想把这些记录排序,让最新的排在最前面。我是这样做的 -

results = list()
for i in range(100):
    res.append((name, content, delta, age))
res = sorted(res, key=lambda i:i[2], reverse=True)

这个方法本来是很好的,但有时候我的时间差对象是None,所以我的lambda函数就出错了。有没有办法解决这个问题呢?

...
TypeError: can't compare datetime.timedelta to NoneType

更新:那些时间差为None的记录应该排到最后。

4 个回答

1

那这样怎么样

res = sorted(filter(lambda t: t is not None, res), key=lambda i:i[2], reverse=True)
4

你希望None在比较时总是小于所有可能的时间差值,甚至是负的时间差。为了实现这个目的,你可以在比较的时候加一个前缀标记:

key=lambda i: (i[2] is not None, i[2])

这样一来,None就会被当作(False, None)来比较,而其他的时间差some_timedelta则会被当作(True, some_timedelta)来比较。这样就不会出现无法比较的类型混在一起的情况。

3

在你的循环里,在把这个元组加到 res 之前,先检查一下 delta 是否是 None。如果是的话,就根据你希望空的 delta 放在哪里(前面还是后面),给它设置一个默认值。

撰写回答