将字典键保存为变量

时间:2015-02-04 16:00:44

标签: python dictionary multidimensional-array key eval

我正在研究一个小框架,并且我找到了一个将字典密钥保存为变量的地方。

我遇到的问题是字典可能有任意数量的层,因此它不仅仅是存储最终密钥的情况。例如,在下面我正在访问[' 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方式来做到这一点?

2 个答案:

答案 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'