2013-01-22 74 views
0

我試圖在字典中執行多個查找,其中一些可能是查找到子字符(d['a'], d['b']['c']['d']['e'])。我希望在查找過程的任何時候在KeyError上返回一個默認值,無論它是在第一個還是第n個字典上。最終目標是將返回值放入新的扁平字典中。從python中嵌套字典查找返回默認值

是否有這樣做比我目前的一個簡單的方法:

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()或使用某種遞歸的考慮,但遲遲不來與任何解決方案。先謝謝您的幫助!他們趕出功能

回答

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

難道我們不能使用'setdefualt'像我一樣? –

+0

謝謝,這個作品很棒!沒有想到使用拆包:) – jwang