Python减少嵌套字典中的嵌套循环

4

我的字典结构长这样:

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

不要将不优雅的代码封装成生成器函数。我现在时间很紧,否则我会把刚才说的话写成答案。 - inspectorG4dget
2个回答

3
您可以使用生成器表达式来完成类似于嵌套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

谢谢您的回答,我想合并这两个的原因是因为我里面有更多的循环。 - maulik13
目前我的代码中有一个与此解决方案完全相同的生成器表达式,但我仍然愿意接受更多想法。 - maulik13

1

不确定这是否是您想要的:

对于(node,prop,value),它们分别代表节点、属性和属性值,可以通过以下方式获取:[(node, prop, value) for node, props in mapping["outputs"].items() for prop, value in props.items()]。然后可以使用print语句输出node、prop和value。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接