python排序timedelta

时间:2010-12-16 17:34:15

标签: python datetime sorting

我有一堆记录,我计算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增量的记录应该移到最后。

4 个答案:

答案 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