Python 在多个ITerable中迭代所有组合

Python 在多个ITerable中迭代所有组合,python,itertools,Python,Itertools,假设dict中有n个键。是否有一种方法可以使用itertools一行程序一次生成n个项 换句话说,我可以在itertools中复制上述代码吗?使用: 请注意,这些值以当前字典顺序返回,这是任意的。如果您需要钥匙的特定顺序,则需要提供该顺序: from itertools import product for combo in product(*somedict.values()): 如果您想再次使用相同键的词典,请使用zip(): 演示: 可以同时获取组合(值)和相应的键吗?@KaliMa:

假设dict中有n个键。是否有一种方法可以使用itertools一行程序一次生成n个项

换句话说,我可以在itertools中复制上述代码吗?

使用:

请注意,这些值以当前字典顺序返回,这是任意的。如果您需要钥匙的特定顺序,则需要提供该顺序:

from itertools import product

for combo in product(*somedict.values()):
如果您想再次使用相同键的词典,请使用
zip()

演示:


可以同时获取组合(值)和相应的键吗?@KaliMa:键的顺序与值的顺序相同:
somedict.keys()
将匹配值的顺序。
from itertools import product

for combo in product(*somedict.values()):
keys = ('foo', 'bar', 'baz')
for combo in product(*(somedict[k] for k in keys)):
for combo in product(*somedict.values()):
    newdict = dict(zip(somedict.keys(), combo))
>>> from itertools import product
>>> somedict = {'foo': [1, 2], 'bar': ['a', 'b', 'c'], 'baz': [42, 81]}
>>> for combo in product(*somedict.values()):
...     print combo
... 
(42, 1, 'a')
(42, 1, 'b')
(42, 1, 'c')
(42, 2, 'a')
(42, 2, 'b')
(42, 2, 'c')
(81, 1, 'a')
(81, 1, 'b')
(81, 1, 'c')
(81, 2, 'a')
(81, 2, 'b')
(81, 2, 'c')
>>> for combo in product(*somedict.values()):
...     print dict(zip(somedict.keys(), combo))
... 
{'bar': 'a', 'foo': 1, 'baz': 42}
{'bar': 'b', 'foo': 1, 'baz': 42}
{'bar': 'c', 'foo': 1, 'baz': 42}
{'bar': 'a', 'foo': 2, 'baz': 42}
{'bar': 'b', 'foo': 2, 'baz': 42}
{'bar': 'c', 'foo': 2, 'baz': 42}
{'bar': 'a', 'foo': 1, 'baz': 81}
{'bar': 'b', 'foo': 1, 'baz': 81}
{'bar': 'c', 'foo': 1, 'baz': 81}
{'bar': 'a', 'foo': 2, 'baz': 81}
{'bar': 'b', 'foo': 2, 'baz': 81}
{'bar': 'c', 'foo': 2, 'baz': 81}