list indices必须是整数python嵌套字典

时间:2013-07-06 12:51:58

标签: python dictionary python-3.x

在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?

我不确定标题是否正确,但我不确定如何最好地描述这一点。

1 个答案:

答案 0 :(得分:2)

如果要遍历字典,请使用循环:

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'])的列表,然后您尝试使用{{1}进行索引一个字符串。列表索引只能是整数:

'cn'