2013-04-29 26 views
2

的不同層次,我想定義一個小包裝函數,它接受某種「路徑」來訪問不同級別的嵌套的字典:使用「路徑」,以便訪問嵌套的字典

D = {'key1': valueA, 
    'key2': {'key21': valueB, 
      {'key22': valueC} 

在這個簡單的例子,我想編寫一個函數,作爲參數使用,例如,像

dict_path = ('key2', 'key22') 

>>>nested_getter(dict_path) 
valueC 
+1

在你的「問題」中似乎沒有問題。只是一個客觀的暗示「GO!」。 – StoryTeller 2013-04-29 12:53:08

回答

4
def nested_getter(d, keys): 
    return reduce(dict.get, keys, d) 
4
D = {'key1': valueA, 
    'key2': {'key21': valueB, 
       'key22': valueC}} 


def nested_getter(root, path): 
    for elem in path: 
     root = root[elem] 
    return root 

一個元組有了這個,你可以這樣做:

>>> nested_getter(D, ('key2', 'key22')) 
3 
+0

我會用'* args'來避免額外的括號。 – StoryTeller 2013-04-29 12:54:34