从python中的嵌套dict查找返回默认值

时间:2013-01-22 05:14:48

标签: python dictionary

我正在尝试在字典中执行多次查找,其中一些可能是查找子项(d['a'], d['b']['c']['d']['e'])。我想在查找过程中的任何一点返回KeyError上的默认值,无论是在第一个还是第n个字典上。最终目标是将返回值放在一个新的扁平字典中。

有没有比现在更简单的方法:

e = {}
try:
    e['a'] = d['a']
except KeyError:
    e['a'] = 0
try:
    e['d'] = d['b']['c']['d']
except KeyError:
    e['d'] = 0

...and so on

我已经考虑了一些问题,并考虑使用.get()或使用defaultdict()或使用某种递归,但无法提出任何解决方案。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

将其分解为一个函数:

def try_get(dic, default, *keys):
    for key in keys:
        try:
            dic = dic[key]
        except KeyError:
            return default
    return dic

e['a'] = try_get(d, 0, 'a')
e['d'] = try_get(d, 0, 'b', 'c', 'd')