Python 如何对列表进行排序并正确处理None值?
我正在尝试使用date属性对对象列表进行排序Python 如何对列表进行排序并正确处理None值?,python,Python,我正在尝试使用date属性对对象列表进行排序 list_of_objects.sort(key=lambda x: x.date, reverse=True) 但是有些日期是零,这意味着我得到了错误 TypeError: can't compare datetime.datetime to NoneType 有没有办法解释这一点?e、 g.在排序列表的顶部或底部有date==None的对象,或者我需要手动执行此操作吗?您可以稍微修改lambda: from datetime import d
list_of_objects.sort(key=lambda x: x.date, reverse=True)
但是有些日期是零,这意味着我得到了错误
TypeError: can't compare datetime.datetime to NoneType
有没有办法解释这一点?e、 g.在排序列表的顶部或底部有
date==None
的对象,或者我需要手动执行此操作吗?您可以稍微修改lambda:
from datetime import datetime
list_of_objects.sort(key=lambda x: x.date or datetime.min, reverse=True)
如果它们出现在排序的错误端,请改用
datetime.max
在排序之前,您可能应该先过滤掉无日期。您希望根据两个属性进行排序:
None
,以及>>> xs = [None, 1, 3, None, 2]
>>> sorted(xs, key=lambda x: (x is None, x))
[1, 2, 3, None, None]
>>> sorted(xs, key=lambda x: (x is not None, x))
[None, None, 1, 2, 3]
>>> sorted(xs, key=lambda x: (x is None, x), reverse=True)
[None, None, 3, 2, 1]
>>> sorted(xs, key=lambda x: (x is not None, x), reverse=True)
[3, 2, 1, None, None]
如果为空x.date返回默认日期,例如今天,该方法的示例可能会很有用。。以@wim的答案为例。给出一个解决方案,而不仅仅是一个建议。和平
>>> xs = [None, 1, 3, None, 2]
>>> sorted(xs, key=lambda x: (x is None, x))
[1, 2, 3, None, None]
>>> sorted(xs, key=lambda x: (x is not None, x))
[None, None, 1, 2, 3]
>>> sorted(xs, key=lambda x: (x is None, x), reverse=True)
[None, None, 3, 2, 1]
>>> sorted(xs, key=lambda x: (x is not None, x), reverse=True)
[3, 2, 1, None, None]