2016-11-07 53 views
3

如果我有一個嵌套的字典中,我可以通過索引像這樣一鍵搞定:通嵌套詞典的位置作爲參數在Python

>>> d = {'a':{'b':'c'}} 
>>> d['a']['b'] 
'c' 

我是否能夠通過該索引作爲函數參數?

def get_nested_value(d, path=['a']['b']): 
    return d[path] 

編輯:我知道我的語法不正確。它是正確語法的代理。

+0

否。您得到'TypeError:列表索引必須是整數,而不是str'。 –

+0

然而你可以這樣做,'path = ['a','b']'並且做'd [path [0]] [path [1]]' –

回答

3

你可以(在Python 3或functools.reduce)使用reduce,但還需要你在你的密鑰列表/元組經過:

>>> def get_nested_value(d, path=('a', 'b')): 
     return reduce(dict.get, path, d) 

>>> d = {'a': {'b': 'c'}} 
>>> get_nested_value(d) 
'c' 
>>> 

(在你的情況['a']['b']不起作用,因爲['a']是一個列表,並['a']['b']正試圖查找該元素在「b「該列表的第n個索引)

+0

感謝,整齊的函數。我以前並沒有意識到這一點! – aberger

0

不是真的,但通過重寫你的函數體一點點,你可以通過按鍵作爲一個元組或其他序列:

def get_nested_value(d, keys): 
    for k in keys: 
     d = d[k] 
    return d 

d = {'a':{'b':'c'}} 
print get_nested_value(d, ("a", "b"))