首页 > 解决方案 > 按表示相同值的多个键对字典进行排序

问题描述

我有一个字典列表,每个字典中都有一个日期(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'>

感谢所有帮助

标签: pythonsortingdictionary

解决方案


感谢@Rakesh 向我展示了x.get()在这种情况下使用的可能性,我找到了一个解决方案:

data.sort(key=lambda x: x.get("created_at", x.get("notification_timestamp", None)), reverse=True)


推荐阅读