我想遍历字典值的所有可能组合

问题描述:

我有一个字典,其中每个值都是列表的列表。我想遍历字典值的所有可能组合

喜欢的东西:

sites = {'e1': [[0, 1, 3], [0, 2, 3]], 'e2': [[0, 1, 4], [0, 3, 4]]} 

我想通过所有可能的组合列表(在我的例子,即对)(即一个的e2e1 +一个名单列表等)循环。

与例如更好:

我想遍历所有这些组合:

[0, 1, 3]; [0, 1, 4] 
[0, 1, 3]; [0, 3, 4] 
[0, 2, 3]; [0, 1, 4] 
[0, 2, 3]; [0, 3, 4] 

此例词典有两个密钥但在实践中,我不知道有多少键会在我的字典。它可能超过两个。

你能帮忙吗?

+1

请参阅下文; 'itertools.product(* sites.values())'会做到这一点。 –

+0

或'list(reduce(product,sites.values()))' –

+0

取决于您是否想要获得2元组或n元组(对于dict中的n个条目)。 'itertools.product'将产生n元组。使用'itertools.combinations'你可以指定元组的长度。 –

您正在查找的笛卡尔积之间列表字典的值。为了达到预期的效果,您可以使用itertools.product作为:

>>> from itertools import product 
>>> sites = {'e1': [[0, 1, 3], [0, 2, 3]], 'e2': [[0, 1, 4], [0, 3, 4]]} 

>>> list(product(*sites.values())) 
[([0, 1, 3], [0, 1, 4]), 
([0, 1, 3], [0, 3, 4]), 
([0, 2, 3], [0, 1, 4]), 
([0, 2, 3], [0, 3, 4])]