Kas*_*nen 5 python dictionary python-3.x
我在 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",
}
Run Code Online (Sandbox Code Playgroud)
这方面的最佳做法是什么?什么是一种直观且易于阅读的方法来做到这一点?
我目前这样做的方式:
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')
Run Code Online (Sandbox Code Playgroud)
这个嵌套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'))
Run Code Online (Sandbox Code Playgroud)
value = data_a['date_modified' if 'date_modified' in data_a else 'date_created']
Run Code Online (Sandbox Code Playgroud)
假设没有错误值并且您实际上不需要False但只是任何错误值:
mod_date_a = data_a.get('date_modified') or data_a.get('date_created')
Run Code Online (Sandbox Code Playgroud)