我有列表的字典列表。如何动态地使用这些键访问字典

时间:2015-11-03 09:14:27

标签: python python-2.7

我有列表,其中包含字典键。如何动态地使用这些键访问字典。 e.g

key_store = ['test','test1']

mydict = {"test":{'test1':"value"},"test3":"value"}

了解如何使用mydict访问key_store我想访问mydict['test']['test1']

注意:key_store存储关键字的深度意味着它只有关键字,它的值将是字典,如测试有字典,所以它有“测试”,“测试1'

3 个答案:

答案 0 :(得分:1)

使用递归:

def get_value(d, k, i):
    if not isinstance(d[k[i]], dict):
        return d[k[i]]
    return get_value(d[k[i]], k, i+1)

参数是字典,列表和您将要运行的索引。

停止条件很简单;一旦该值不是字典,您想要返回它,否则您继续使用列表中的下一个元素在字典上旅行。

>>> key_store = ['test','test1']
>>> Dict = {"test":{'test1':"value"},"test3":"value"}
>>> def get_value(d, k, i):
...     if isinstance(d[k[i]], str):
...         return d[k[i]]
...     return get_value(d[k[i]], k, i+1)
...
>>> get_value(Dict, key_store, 0)
'value'

答案 1 :(得分:1)

您可以使用简单的for循环来完成此操作。

def get_nested_key(keypath, nested_dict):
    d = nested_dict
    for key in keypath:
        d = d[keypath]
    return d

>>> get_nested_key(('test', 'test1'), Dict)

根据需要添加错误检查。

答案 2 :(得分:0)

你可以用一个简单的字典reduce:

来做到这一点
>>> mydict = {"test": {'test1': "value"}, "test3": "value"}
>>> print reduce(dict.get, ['test', 'test1'], mydict)
value