如果你想穿越词典,使用循环:
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