2015-10-11 92 views
3

我的字典结构是这样的:的Python减少嵌套的字典嵌套循环

mapping = {'outputs': {'cube1': {'tx': 1.0}}} 

而且我遍历他们像这样:

for node, props in mapping['outputs'].items(): 
    for prop, value in props.items(): 
     #Further loops 

是否有崩溃这两个嵌套的一种优雅的方式循环到一个?

我希望得到这个结果:

for node, prop, value in nest_loop(mapping['outputs']): 
    #Further loops 
+0

不无封装inelegance到发电机的功能。我现在正在计划中,或者我会根据刚才所说的做出回答 – inspectorG4dget

回答

2

您可以用生成器表达式做类似于你的嵌套的for循环正在做的工作。示例 -

nest_loop = ((a,b,c) for a,x in mapping['outputs'].items() for b,c in x.items()) 
for node, prop, value in nest_loop: 
    #Do work 

但我更喜欢这个更可读的嵌套循环。

演示 -

>>> mapping = {'outputs': {'cube1': {'tx': 1.0}}} 
>>> nest_loop = ((a,b,c) for a,x in mapping['outputs'].items() for b,c in x.items()) 
>>> for node, prop, value in nest_loop: 
...  print(node,prop,value) 
... 
cube1 tx 1.0 
+0

感谢您的回答,我想折叠这两个的原因是我内部有更多的循环。 – maulik13

+0

目前我的代码中有一个完全相同的生成器表达式,但我仍然接受更多的想法。 – maulik13

1

不知道这是否是你想要什么:

for node, prop, value in [(node, prop, value) for node, props in mapping["outputs"].items() for prop, value in props.items()]: print node, prop, value