0

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

4

1 回答 1

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')
于 2013-01-22T05:19:30.813 回答