python - 按表示相同值的多个键对字典进行排序
问题描述
我有一个字典列表,每个字典中都有一个日期(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'>
感谢所有帮助
解决方案
感谢@Rakesh 向我展示了x.get()
在这种情况下使用的可能性,我找到了一个解决方案:
data.sort(key=lambda x: x.get("created_at", x.get("notification_timestamp", None)), reverse=True)
推荐阅读
- javascript - 如何使用 FETCH 请求获取多个文件?
- python - 如何选择名称中包含指定单词的列并且它们的值等于databricks上的hive sql中的指定值
- java - 为什么我在 Java Spring 中收到“没有映射 GET /css/main.css”?
- git - 如何在没有任何合并/变基的情况下拉到上游
- python - 如何在 Manim 中运行自己的文件
- javascript - 以 MM:SS 格式将秒转换为分和秒
- c# - 何时调用 SynchronizationContext.Send,我的自定义 SynchronizedContext 是否应该覆盖它?
- node.js - 无法在 Digital Ocean 上将容器应用程序与 mongodb 连接
- excel - 尝试在我的范围内删除具有错误值的行
- sql - 在 PostgreSQL 中按月中最近的日期过滤