2012-11-21 18 views
1

可能重複:
Checking a Dictionary using a dot notation string最佳實踐,以獲取和設置多級字典的值

有一個多層次字典是這樣的:

some_infomations = { 
    "root":{ 
     "sub":{ 
      "more_deep":{ 
       "not_enough": "Some value", 
       "another": "bla..bla" 
      } 
     }, 
     "more":{ 
      "more_deep":{ 
       "not_enough": "Some value", 
       "another": "bla..bla" 
      } 
     } 
    } 
} 

我有一個麪包屑字符串,如root.sub.more_deep.another,有一個簡單的和好辦法嗎就像工作?

+1

類似的問題:http://stackoverflow.com/q/12414821/1639625 –

+0

感謝您的意見。 :-) – kimjxie

回答

0

貼在這裏主要是爲了好玩,但也因爲reduce有很多更多的使用比大多數人給它的信貸...:

from operator import getitem 
def dot_get(your_dict,s): 
    return reduce(getitem, s.split('.'), your_dict) 

d = {'foo': {'bar': {'baz': 1}}} 
print dot_pull(d,'foo.bar.baz') 

編輯 - 顯然,這是OP是如何做它對前一個問題,我沒有讀過相當足夠仔細,雖然OP使用dict.get這將抑制KeyError異常。

要設置的項目,你需要拆斷的最後一個元素,並獲得一個上面:

def dot_set(your_dict,s,v): 
    head,tail = s.rsplit('.',1) 
    dot_get(yourdict,head)[tail] = v 
+0

我不知道如何正確地格式化我的回答,我在這裏貼吧: https://gist.github.com/veverjak/72fa753f5e4234647835 – user1830432