【问题标题】:all variations with nested loop from dict来自dict的嵌套循环的所有变体
【发布时间】:2021-08-26 13:26:41
【问题描述】:

我有一个嵌套循环,它将组装参数的所有变体。参数越多,嵌套越大。

for param1 in [1,2,3]:
    for param2 in [5,10,15]:
        for param3 in [10,11,12]:
            for param4 in [35,36,37]:
                for param5 in [2,4,6]:
                    params  = {
                        'param1': param1,
                        'param2': param2,
                        'param3': param3,
                        'param4': param4,
                        'param5': param5,
                    }
                    run_test(params)

为了使代码更具可读性,希望将所有变体放入 dict 中,然后创建上面的循环。但是如何实现呢?

configuration  = {
    'param1': [1,2,3],
    'param2': [5,10,15],
    'param3': [10,11,12],
    'param4': [35,36,37],
    'param5': [2,4,6],
}

期望的输出是一个字典列表

[
    {
        'param1': param1,
        'param2': param2,
        'param3': param3,
        'param4': param4,
        'param5': param5,
    },
    { next dict …}
]

如果输入是 list of listsCartesian product 将起作用,但我有一个输入是 dict of lists 非常欢迎关于如何改进第一个解决方案的建议

【问题讨论】:

  • 我将建议您链接到的相同答案。哪一部分你不能去工作?
  • list(product(*configuration.values()))
  • 您好!请不要在previous question is closed 时自行删除和重新发布您的问题。如果您觉得建议的副本没有回答您的问题,您应该在edit 中解释原因。编辑后,您的帖子将自动排队等待重新打开。
  • 我添加了所需的输出,它使用配置键
  • @Brian 对不起,我这样做了

标签: python python-3.x loops dictionary nested-loops


【解决方案1】:

你仍然可以使用itertools.product,只需zip返回键和值

import itertools 

configuration  = {
    'param1': [1,2,3],
    'param2': [5,10,15],
    'param3': [10,11,12],
    'param4': [35,36,37],
    'param5': [2,4,6],
}

for i in itertools.product(*configuration.values()):
    params = dict(zip(configuration.keys(), i))
    run_test(params)

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2021-01-04
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多