2015-10-11 93 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