使用列表值作为后续键访问字典值

时间:2018-11-08 23:52:45

标签: python python-3.x dictionary

keys = ['prop1', 'prop2', 'prop3']
dict = { prop1: { prop2: { prop3: True } } }

如何使用列表从字典中获取值True

没有成功

val = reduce((lambda a, b: dict[b]), keys)

更新:

keysdict可以任意长,但始终具有匹配的属性/键。

2 个答案:

答案 0 :(得分:3)

使用循环:

>>> a = ['prop1', 'prop2', 'prop3'] 
>>> d = {'prop1': {'prop2': {'prop3': True}}}
>>> result = d
>>> for k in a: 
...     result = result[k] 
...
>>> result
True

使用功能样式:

>>> from functools import reduce
>>> reduce(dict.get, a, d)
True

答案 1 :(得分:1)

编辑: 作为操作。改写了他的问题,我进行了更新:

实际上,您根本不需要密钥就可以获取“ True”。 您可以使用递归函数在不知道键的情况下很好地完成操作。

d = { 'prop1': { 'prop2': { 'prop3': True } } }

def d_c(dc):
    if isinstance(list(dc.values())[0], dict):
        return d_c(list(dc.values())[0])
    return list(dc.values())[0]

结果:

True