将字典键保存为变量
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'
我正在开发一个小型框架,并且我发现了一个将字典键保存为变量的地方。
我遇到的问题是字典可能有任意层数,所以这不仅仅是存储最终密钥的情况。例如,在下面我正在访问 ['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'