用代表相同值的多个键对字典进行排序

时间:2019-07-16 10:09:00

标签: python sorting dictionary

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

感谢所有帮助

2 个答案:

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