首页 > 解决方案 > 有条件地从 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()看起来有点笨拙,所以我想知道是否有人对此有更好的解决方案。

标签: pythonpython-3.xdictionary

解决方案


如果你经常需要这个,为它写一个函数是完全合理的:

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'))

推荐阅读