Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成所有参数的组合_Python - Fatal编程技术网

Python 生成所有参数的组合

Python 生成所有参数的组合,python,Python,我有所有可能的参数值的字典(参数的空间),我需要将所有可能的参数组合生成字典。输入字典中的键(参数)数量不是固定的,可能会有所不同 我已输入dict,参数的定义数量不一: space_of_params = {'param1':range(1,5),'param2':['a','b','c'],'param3'[True,False],....} 我需要将所有参数组合生成DICT: {'param1':1, 'param2':a, 'param3': True} {'param1':1, 'p

我有所有可能的参数值的字典(参数的空间),我需要将所有可能的参数组合生成字典。输入字典中的键(参数)数量不是固定的,可能会有所不同

我已输入dict,参数的定义数量不一:

space_of_params = {'param1':range(1,5),'param2':['a','b','c'],'param3'[True,False],....}
我需要将所有参数组合生成DICT:

{'param1':1, 'param2':a, 'param3': True}
{'param1':1, 'param2':b, 'param3': True}
{'param1':1, 'param2':c, 'param3': True}
{'param1':1, 'param2':a, 'param3': False}
{'param1':1, 'param2':b, 'param3': False}
{'param1':1, 'param2':c, 'param3': False}

等等

尽管您可以为此编写自定义算法,但我猜您最好围绕
itertools.product
函数编写一些逻辑:

from itertools import product

def dict_product(**args):
    tupargs = list(args.items())
    keys = list(map(lambda x:x[0],tupargs))
    for item in product(*map(lambda x:x[1],tupargs)):
        yield dict(zip(keys,item))

因此,我们首先要做的是将字典转换为键值元组列表。接下来,我们构造字典值的所有
product
s和
zip
以及从字典中提取的
到新字典中。

您可以通过以下方式使用
itertools.product

from itertools import product

lst = [dict(zip(params, v)) for v in product(*space_of_params.values())]
这将生成一个列表,如果您打印它,您将获得所需的结果:

for item in lst:
    print item

{'param3': True, 'param2': 'a', 'param1': 1}
{'param3': True, 'param2': 'a', 'param1': 2}
{'param3': True, 'param2': 'a', 'param1': 3}
{'param3': True, 'param2': 'a', 'param1': 4}
{'param3': True, 'param2': 'b', 'param1': 1}
{'param3': True, 'param2': 'b', 'param1': 2}
{'param3': True, 'param2': 'b', 'param1': 3}
{'param3': True, 'param2': 'b', 'param1': 4}
{'param3': True, 'param2': 'c', 'param1': 1}
{'param3': True, 'param2': 'c', 'param1': 2}
{'param3': True, 'param2': 'c', 'param1': 3}
{'param3': True, 'param2': 'c', 'param1': 4}
...
for item in lst:
    print item

{'param3': True, 'param2': 'a', 'param1': 1}
{'param3': True, 'param2': 'a', 'param1': 2}
{'param3': True, 'param2': 'a', 'param1': 3}
{'param3': True, 'param2': 'a', 'param1': 4}
{'param3': True, 'param2': 'b', 'param1': 1}
{'param3': True, 'param2': 'b', 'param1': 2}
{'param3': True, 'param2': 'b', 'param1': 3}
{'param3': True, 'param2': 'b', 'param1': 4}
{'param3': True, 'param2': 'c', 'param1': 1}
{'param3': True, 'param2': 'c', 'param1': 2}
{'param3': True, 'param2': 'c', 'param1': 3}
{'param3': True, 'param2': 'c', 'param1': 4}
...