我正在尝试在字典中执行多次查找,其中一些可能是查找子项(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()
或使用某种递归,但无法提出任何解决方案。在此先感谢您的帮助!
答案 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')