最好的办法是写自己的语法,您会解析。你必须使用一个永远不会出现在密钥中的charachter,一个流行的例子是.
,但相似,$
,|
也适用。
def get(d, key):
kp = key.split('.')
for k in kp:
d = d[k]
return d
d = {'a': {'b': 2}}
get(d, 'a.b')
>>> 2
编辑更新的问题:
所以你要能得到特别是在每个这种情况下A·B的值的列表?如果是的话,你仍然可以使用上面,像这样
d = {
"word":{"a":{"b":2}},
"hello":{"a":{"b":1}},
"mouse":{"a":{"b":5}},
}
# nesting calls to get just to show it is flexible like that
[get(get(d, k), 'a.b') for k in d.keys()]
# if you wanted to generate a dict of {"word": val} it would look like this
{k:get(get(d, k), 'a.b') for k in d.keys()}
它甚至工作方法,如果你的可变部分是在中间
d = {
"x": {"word":{"a":{"b":2}}},
"x": {"hello":{"a":{"b":1}}},
"x": {"mouse":{"a":{"b":5}}},
}
# using more calls to get just to show it is flexible like that
[get(get(d, 'x.'+k), 'a.b') for k in get(d, 'x').keys()]
什么是使用这种背景下? – mattsap
这可能是一个“xy问题”的情况 - 以这种方式通过字符串引用嵌套的字典项目是不可能的,但是您想用这种方式做什么很可能......用另一种方式。那么,你想怎么做呢? – Roberto
Python有一个'eval'函数可能会使它工作 - 但我同意以前的意见。 – usr2564301