按日期排序Python对象列表(部分为None)
这是我之前提问的一个小更新,关于如何在Python中处理列表的问题。
我有一个叫做results的列表。这个列表里的大部分结果对象都有一个人对象,而大部分人对象都有一个出生日期属性(result.person.birthdate)。这个出生日期是一个日期时间对象。
我想按照出生日期来排序这个结果列表,最老的排在前面。不过,如果某个结果没有人对象,或者人对象没有出生日期,我还是希望这个结果能包含在列表中。理想情况下,这些结果应该放在列表的最后面。
那么,最符合Python风格的方法是什么呢?
5 个回答
0
我理解“如果没有人对象或者这个人对象没有出生日期”是指结果对象没有“person”这个属性,同时结果的person对象也没有“birthdate”这个属性。不过我注意到你之前的问题使用了一些奇怪的说法,比如“人对象设置为None”(在评论中)。你是怎么把一个对象设置为None的?你是说把person属性设置为None吗?提问的时候,(1) 请确保问题可以独立理解,(2) 详细解释一下你的数据结构是什么样的。
import datetime
large_date = datetime.datetime(9999, 12, 31)
results.sort(key=lambda result:
result.person.birthdate
if hasattr(result, 'person') and hasattr(result.person, 'birthdate')
else large_date
)
4
def birthdate_key(x):
missing = (x.person is None or x.person.birthdate is None)
return (missing, x.person.birthdate if not missing else None)
results.sort(key=birthdate_key)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
11
import datetime
results.sort(key=lambda r: r.person.birthdate
if (r and r.person and r.person.birthdate)
else datetime.datetime.now())
(顺便说一下,你可以直接修改你之前的问题。)