f_f*_*ola 10 python dictionary nested
我有一些字典词典,像这样:
a['b']['c']['d']['answer'] = answer1
a['b']['c']['e']['answer'] = answer2
a['b']['c']['f']['answer'] = answer3
....
a['b']['c']['d']['conf'] = conf1
a['b']['c']['e']['conf'] = conf2
a['b']['c']['f']['conf'] = conf3
Run Code Online (Sandbox Code Playgroud)
有没有一种快速的方法来获得第三级(d,e,f)所有元素的所有答案的值列表?
具体来说,我想知道是否有任何实现通配符的机制(例如, a['b']['c']['*']['answer'].values()
更新 我发现到目前为止最快的方法是:
[x['answer'] for x in a['b']['c'].values()]
Run Code Online (Sandbox Code Playgroud)
Ric*_*ard 12
在Python3中,我们可以为此构建一个简单的生成器:
def NestedDictValues(d):
for v in d.values():
if isinstance(v, dict):
yield from NestedDictValues(v)
else:
yield v
a={4:1,6:2,7:{8:3,9:4,5:{10:5},2:6,6:{2:7,1:8}}}
list(NestedDictValues(a))
Run Code Online (Sandbox Code Playgroud)
输出是:
[1, 2, 3, 4, 6, 5, 8, 7]
Run Code Online (Sandbox Code Playgroud)
这是所有的价值观.
只是为了回答这个主题,从我的问题的“更新状态”复制我的解决方案:
[x['answer'] for x in a['b']['c'].values()]
Run Code Online (Sandbox Code Playgroud)
希望这能有所帮助。