我有列表,其中包含字典键。如何动态地使用这些键访问字典。 e.g
key_store = ['test','test1']
mydict = {"test":{'test1':"value"},"test3":"value"}
了解如何使用mydict
访问key_store
我想访问mydict['test']['test1']
。
注意:key_store
存储关键字的深度意味着它只有关键字,它的值将是字典,如测试有字典,所以它有“测试”,“测试1'
答案 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