如果你想穿越詞典,使用循環:
def nestedvalueget(*keys):
ob = nesteddict
for key in keys:
ob = ob[key]
return ob
或使用functools.reduce()
:
from functools import reduce
from operator import getitem
def nestedvalueget(*keys):
return reduce(getitem, keys, nesteddict)
然後使用版本爲:
nestedvalueget('c', 'cn')
注意,任一版本採用可變數量的參數讓您可以將0個或更多個鍵作爲位置參數。
演示:
>>> nesteddict = {'a':'a1','b':'b1','c':{'cn':'cn1'}}
>>> def nestedvalueget(*keys):
... ob = nesteddict
... for key in keys:
... ob = ob[key]
... return ob
...
>>> nestedvalueget('c', 'cn')
'cn1'
>>> from functools import reduce
>>> from operator import getitem
>>> def nestedvalueget(*keys):
... return reduce(getitem, keys, nesteddict)
...
>>> nestedvalueget('c', 'cn')
'cn1'
,並闡明你的錯誤信息:您通過表達['n']['cn']
你的函數調用,它定義了一個元素(['n']
),然後您可以嘗試指數與'cn'
名單,一個字符串。列表索引只能是整數:
>>> ['n']['cn']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> ['n'][0]
'n'
functools.reduce()是我正在尋找的。謝謝! – Eugene