gpt4 book ai didi

python - 来自不同大小集合的元素的所有可能组合

转载 作者:行者123 更新时间:2023-11-28 22:09:13 24 4
gpt4 key购买 nike

我正在创建一个供私有(private)使用的工具,但我遇到了一个复杂的组合问题。

我有 7 个类似格式的子字典:

{"D1": {"A": 1, "B": 3, "C":6},
"D2": {"D": 4},
"D3": {"E": 8, "F": 12, "G": 2}.
"D4": {"H": 9, "I": 3}.
"D5": {"J": 2},
"D6": {"K": 8, "L": 1},
"D7": {"M": 2}}

我需要的是生成所有可能的字典,这些字典将以这种格式组合每个字典中的 1 个元素:

[{"D1": "A", "D2": "D", "D3": "E", "D4": "H", "D5": "J", "D6": "K", "D7": "M"},
{"D1": "A", "D2": "D", "D3": "F", "D4": "I", "D5": "J", "D6": "L", "D7": "M"},
and all other possible combinations]

输出应该是所有 DX 指令中元素的所有可能唯一组合的列表。我可能能够使用一些非常复杂、丑陋的嵌套 for 循环和大量 if 来解决这个问题,但在 itertools 或类似的东西中可能有一种非常好的方法来解决这个问题。

对高效完成这项任务有什么帮助吗?这个任务需要在大量这样的字典上重复,所以性能是关键。谢谢!

最佳答案

看起来有点复杂,但是一个相当简单的解决方案:

import itertools

D = [D1, D2, D3, D4, ...]

dicts = [
dict(zip([f'D{i+1}' for i in range(len(D))], iter))
for iter in itertools.product(*[list(d.keys()) for d in D])
]

dict_1 = dicts[0]
dict_2 = dicts[1]
...
dicts = [
{'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'H'},
{'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'I'},
{'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'H'},
{'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'I'},
...
]

工作原理:

生成所有键的组合

itertools.product(*[list(d.keys()) for d in D])

将组合与适当的字典名称组合

zip([f'D{i+1}' for i in range(len(D))], iter))

合并两部分并将它们各自转换为字典

[
dict(zip([f'D{i+1}' for i in range(len(D))], iter))
for iter in itertools.product(*[list(d.keys()) for d in D])
]

关于python - 来自不同大小集合的元素的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57819285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com