生成多类型集合的所有可能排列

时间:2019-06-21 23:12:58

标签: python permutation itertools

我可以使用itertools生成多型字典的所有可能排列吗?我很难弄清楚可以使用哪个itertools函数来实现此目的。你知道吗?

下面是我想要实现的一个例子

# Give the below Dict to a itertools function...
tuner_params = {
    'darken': (True, False),
    'hue_quantize': (True, False),
    'quantize': (True, False),
    'blur': (range(1,25), range(1,25)),
    'h_samples': range(2, 20),
    'v_samples': range(2, 20), 
    'offset': range(0.05, 0.9, 0.05), 
    'kernel': (range(1,25), range(1,25))
}

# And get something like...desired output is all possible permuations of the above dict values, for eg
[{
    'darken': True,
    'hue_quantize': True,
    'quantize': True,
    'blur': (1,1),
    'h_samples': 2,
    'v_samples': 2, 
    'offset': 0.05, 
    'kernel': (1,1)
},
{
    'darken': False,
    'hue_quantize': True,
    'quantize': True,
    'blur': (1,1),
    'h_samples': 2,
    'v_samples': 2, 
    'offset': 0.05, 
    'kernel': (1,1)
}
...
{
    'darken': False,
    'hue_quantize': False,
    'quantize': False,
    'blur': (25,25),
    'h_samples': 20,
    'v_samples': 20, 
    'offset': 0.9, 
    'kernel': (25,25)
}]

1 个答案:

答案 0 :(得分:0)

您可以使用

  • 字典理解和嵌套for子句
  • itertools.product上的各种数据集合-生成值列表,然后将其分配给所需的dict键。

请注意,您必须了解有关如何指定可迭代对象的更多信息。例如,True or False只是布尔值True;您需要(True, False)来允许product正确迭代这些值。同样,我想您会希望将range迭代器转换为list类型。

就足以使您朝着需要的方向前进吗?