我有一堆记录,我计算timedelta(最新 - 创作时间)。我需要对它们进行排序,以便最新发布。我这样做 -
results = list()
for i in range(100):
res.append((name, content, delta, age))
res = sorted(res, key=lambda i:i[2], reverse=True)
这样做会很完美,但在某些情况下我的delta对象是None
。所以我的lambda
fn。正在吐出错误。有什么方法可以解决这个问题吗?
...
TypeError: can't compare datetime.timedelta to NoneType
更新:None
增量的记录应该移到最后。
答案 0 :(得分:3)
你希望None比较所有可能的timedelta值,甚至是负值。所以你所做的就是用领先的旗帜来增加你的钥匙:
key=lambda i: (i[2] is not None, i[2])
因此,None
被比较为(False, None)
,some_timedelta
被比较为(True, some_timedelta)
,并且不可比较的类型被混合。
答案 1 :(得分:2)
在你的循环中,在将元组追加到res
之前,检查delta
是否为None
- 如果是,请根据您的位置将其设置为某种默认值像空的三角洲一样(正面或背面)。
答案 2 :(得分:1)
怎么样
res = sorted(filter(lambda t: t is not None, res), key=lambda i:i[2], reverse=True)
答案 3 :(得分:0)
def compare_time( item ):
delta = item[2]
return timedelta(days=365*100) if delta is None else delta # 100 years