Python 生成所有参数的组合
我有所有可能的参数值的字典(参数的空间),我需要将所有可能的参数组合生成字典。输入字典中的键(参数)数量不是固定的,可能会有所不同 我已输入dict,参数的定义数量不一: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
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}
...