python - 有条件地从 Python 字典中获取值的最佳实践
问题描述
我有一本结构非常标准的python字典。如果存在,我想检索一个值,如果不检索另一个值。如果由于某种原因两个值都丢失了,我需要抛出一个错误。
字典示例:
# Data that has been modified
data_a = {
"date_created": "2020-01-23T16:12:35+02:00",
"date_modified": "2020-01-27T07:15:00+02:00"
}
# Data that has NOT been modified
data_b = {
"date_created": "2020-01-23T16:12:35+02:00",
}
对此的最佳做法是什么?什么是一种直观且易于阅读的方式来做到这一点?
我目前这样做的方式:
mod_date_a = data_a.get('date_modified', data_a.get('date_created', False))
# mod_data_a = "2020-01-27T07:15:00+02:00"
mod_date_b = data_b.get('date_modified', data_b.get('date_created', False))
# mod_data_b = "2020-01-23T16:12:35+02:00"
if not mod_date_a or not mod_date_b:
log.error('Some ERROR')
这个嵌套get()
看起来有点笨拙,所以我想知道是否有人对此有更好的解决方案。
解决方案
如果你经常需要这个,为它写一个函数是完全合理的:
def get_or_error(d, *keys):
for k in keys:
try:
return d[k]
except KeyError:
pass
else:
raise KeyError(', '.join(keys))
print(get_or_error(data_a, 'date_modified', 'date_created'))
推荐阅读
- html - 带有目标的 Boostrap 响应式列
- java - 在Java中生成一些范围内的许多随机数,但有一些例外
- allennlp - AllenNLP)有没有办法为评估设置配置,特别是为读者?
- upgrade - Ojdbc8 jars 升级到 21.1.0.0 抛出 Nosuchmethod 异常 UCPservletContextListener init
- django - context_object_name 在 CreateView (Django 2.2) 上不起作用
- api - VB.NET order binance 不断收到错误 400
- python - 保存 Bert 微调模型
- javascript - 有没有办法根据另一个对象的值重命名对象属性?
- pdf - 从 PDF 中删除页面时出现 Itext7 空异常错误
- java - Java中的键输入故障