我有一个词典列表,每个词典中都有一个日期(datetime.datetime
个对象),但是在某些情况下它与键"created_at"
相关,在其他情况下它与"notification_timestamp"
相关。
data = [{'foo':'bar', 'created_at':'00:15:20 04/05/2019'},{'foo2':'bar2', 'notification_timestamp':'00:35:20 04/05/2019'}]
我知道我可以重命名这些键,但是我需要一种高效/可扩展的解决方案来通过这些键对列表进行排序。
我尝试过data = data.sort(key=operator.itemgetter("created_at", "notification_timestamp"), reverse=True)
,但它引发以下错误:
Exception Type: KeyError at /v1/my_script
Exception Value: 'notification_timestamp'
大概是因为并非所有的词典都有此键。
我确定变量的数据类型是该脚本的输出
for d in data:
if d.get("created_at", False):
print("CREATED AT TYPE: ", type(d.get("created_at")))
if d.get("notification_timestamp", False):
print("notification_timestamp TYPE: ", type(d.get("notification_timestamp")))
是
CREATED AT TYPE: <class 'datetime.datetime'>
notification_timestamp TYPE: <class 'datetime.datetime'>
感谢所有帮助
答案 0 :(得分:1)
感谢@Rakesh向我展示了在这种情况下使用x.get()
的可能性,我找到了一个解决方案:
data.sort(key=lambda x: x.get("created_at", x.get("notification_timestamp", None)), reverse=True)
答案 1 :(得分:-1)
尝试使用dict.get
例如:
data = [{'foo':'bar', 'created_at':'00:15:20 04/05/2019'},{'foo2':'bar2', 'notification_timestamp':'00:35:20 04/05/2019'}]
data.sort(key=lambda x: x.get("created_at", x.get("notification_timestamp"))) #Thanks AbdulNiyasPM & h4z3
print(data)