如何迭代所有字典组合

Tri*_*cky 4 python combinations dictionary combinatorics

考虑我有以下字典:

someDict = {
  'A': [1,2,3],
  'B': [4,5,6],
  'C': [7,8,9]
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以迭代为所有可能的组合创建新的字典,即?

{'A' : 1, 'B': 4, 'C':7}
{'A' : 1, 'B': 4, 'C':8}
{'A' : 1, 'B': 4, 'C':9}
{'A' : 2, 'B': 4, 'C':7}
Run Code Online (Sandbox Code Playgroud)

ETC

Dan*_*ejo 6

您可以按如下方式使用itertools.product

from itertools import product

someDict = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}

keys, values = zip(*someDict.items())
result = [dict(zip(keys, p)) for p in product(*values)]

for d in result:
    print(d)
Run Code Online (Sandbox Code Playgroud)

输出

{'A': 1, 'B': 4, 'C': 7}
{'A': 1, 'B': 4, 'C': 8}
{'A': 1, 'B': 4, 'C': 9}
{'A': 1, 'B': 5, 'C': 7}
{'A': 1, 'B': 5, 'C': 8}
{'A': 1, 'B': 5, 'C': 9}
{'A': 1, 'B': 6, 'C': 7}
{'A': 1, 'B': 6, 'C': 8}
{'A': 1, 'B': 6, 'C': 9}
{'A': 2, 'B': 4, 'C': 7}
{'A': 2, 'B': 4, 'C': 8}
{'A': 2, 'B': 4, 'C': 9}
{'A': 2, 'B': 5, 'C': 7}
{'A': 2, 'B': 5, 'C': 8}
{'A': 2, 'B': 5, 'C': 9}
{'A': 2, 'B': 6, 'C': 7}
{'A': 2, 'B': 6, 'C': 8}
{'A': 2, 'B': 6, 'C': 9}
{'A': 3, 'B': 4, 'C': 7}
{'A': 3, 'B': 4, 'C': 8}
{'A': 3, 'B': 4, 'C': 9}
{'A': 3, 'B': 5, 'C': 7}
{'A': 3, 'B': 5, 'C': 8}
{'A': 3, 'B': 5, 'C': 9}
{'A': 3, 'B': 6, 'C': 7}
{'A': 3, 'B': 6, 'C': 8}
{'A': 3, 'B': 6, 'C': 9}
Run Code Online (Sandbox Code Playgroud)