如何得到所有可能的组合

2024-04-28 18:08:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些像这样的东西:

{'Y': [1, 2, 6, 7],
 'X': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
 'Z': [0, 3, 6, 9]}

可能有3个以上的变量。 我不想得到所有这些变量的组合。 得到类似于:

^{pr2}$

我想不出算法。 请帮帮我。在


Tags: 算法pr2帮帮我
3条回答

使用list(itertools.product(*your_dict.values()))可以简单地得到它:)

编辑:为了您的预期结果,我写了以下内容:

 [{key: value[n] for n, key in enumerate(your_dict.keys())} for value in itertools.product(*your_dict.values())]

不是很好看,但它只是工作(仅在Python2.7+中)。在

基于Felix Yan的一个更好的解决方案:

[dict(zip(your_dict.keys(), item)) for item in itertools.product(*your_dict.values())]

其他的海报是对的:itertools.product在这里非常有用。但是,由于词典的格式不同,因此需要注意确保获得原始词典键。在

import itertools

data = {'Y': [1, 2, 6, 7],
        'X': [0, 1, 2, 3, 4, 5, 6, 7,
              8, 9, 10, 11, 12, 13, 14, 15, 16,
              17, 18, 19, 20, 21, 22, 23, 24],
        'Z': [0, 3, 6, 9]}
# Join the key and value together in tuples
# [[('Y', 1), ('Y', 2), ('Y', 6), ('Y', 7)], ...]
tuples = [[(var, val) for val in data[var]] for var in data]

# Create the dictionary setting values to X, Y, and Z
# [{'Y': 1, 'X': 0, 'Z': 0}, {'Y': 1, 'X': 0, 'Z': 3} ....]
answer = [dict(a) for a in itertools.product(*tuples)]

相关问题 更多 >