Python按时间间隔排序
我有一堆记录,我需要计算时间差(最新时间 - 创建时间)。我想把这些记录排序,让最新的排在最前面。我是这样做的 -
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
放在哪里(前面还是后面),给它设置一个默认值。