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 に答える