在python 3中,我需要一个函数来动态地从嵌套键返回一个值。
nesteddict = {'a':'a1','b':'b1','c':{'cn':'cn1'}}
print(nesteddict['c']['cn']) #gives cn1
def nestedvalueget(keys):
print(nesteddict[keys])
nestedvalueget(['n']['cn'])
如何编写nestedvalueget?
我不确定标题是否正确,但我不确定如何最好地描述这一点。
答案 0 :(得分:2)
如果要遍历字典,请使用循环:
def nestedvalueget(*keys):
ob = nesteddict
for key in keys:
ob = ob[key]
return ob
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']
)的列表,然后您尝试使用{{1}进行索引一个字符串。列表索引只能是整数:
'cn'