首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个可迭代性中遍历所有组合

在多个可迭代性中遍历所有组合
EN

Stack Overflow用户
提问于 2014-06-14 22:20:14
回答 1查看 102关注 0票数 2
代码语言:javascript
复制
for item1 in dict[1]:
   for item2 in dict[2]:
     for item3 in dict[3]:
        and so on

假设在dict中有n个键。是否有一种方法一次使用迭代工具生成n个条目?

换句话说,我能用迭代工具中的东西来复制上面的代码吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-14 22:21:18

使用itertools.product()

代码语言:javascript
复制
from itertools import product

for combo in product(*somedict.values()):

注意,这些值是按当前字典顺序返回的,这是任意的。如果您需要对密钥进行特定的排序,则需要提供该命令:

代码语言:javascript
复制
keys = ('foo', 'bar', 'baz')
for combo in product(*(somedict[k] for k in keys)):

如果您希望再次使用相同密钥的字典,请使用zip()

代码语言:javascript
复制
for combo in product(*somedict.values()):
    newdict = dict(zip(somedict.keys(), combo))

演示:

代码语言:javascript
复制
>>> 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}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24224827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档