将字典键保存为变量

Save a dictionary key as a variable

我正在开发一个小型框架,并且我发现了一个将字典键保存为变量的地方。

我遇到的问题是字典可能有任意层数,所以这不仅仅是存储最终密钥的情况。例如,在下面我正在访问 ['dig']['result'],但这同样可以是 ['output'] 或 ['some']['thing'] ['strange']

    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 方法来做到这一点?

要处理任意深度的键嵌套,您可以迭代键的序列(例如元组):

>>> 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'
>>> def access(o,path):
...   for k in path.split('/'):
...     o = o[k]
...   return o
... 
>>> access({'a': {'b': {'c': 'd'}}},'a/b/c')
'd'