我正在研究一个小框架,并且我找到了一个将字典密钥保存为变量的地方。
我遇到的问题是字典可能有任意数量的层,因此它不仅仅是存储最终密钥的情况。例如,在下面我正在访问[' dig'] ['结果'],但这可能同样是['输出']或['一些'] ['东西'] ['奇怪']
if result:
if self.cli_args.json:
pprint(result)
else:
print result['dig']['result']
我可以将密钥保存为字符串,并在以下内容中使用eval():
key="['test']"
test_dict = { "test" : "This works" }
eval("test_dict" + key)
>>> 'This works'
但是eval真的很脏吗? :-)
有没有好的/ pythonic方式来做到这一点?
答案 0 :(得分:2)
要处理任意深度的键嵌套,您可以迭代键的序列(例如元组):
>>> d = {'a': {'b': {'c': 'd'}}}
>>> d['a']['b']['c']
'd'
>>> keys = ('a', 'b', 'c') # or just 'abc' for this trivial example
>>> content = d
>>> for k in keys:
content = content[k]
>>> content
'd'
答案 1 :(得分:1)
>>> def access(o,path):
... for k in path.split('/'):
... o = o[k]
... return o
...
>>> access({'a': {'b': {'c': 'd'}}},'a/b/c')
'd'