我想遍历字典值的所有可能组合
问题描述:
我有一个字典,其中每个值都是列表的列表。我想遍历字典值的所有可能组合
喜欢的东西:
sites = {'e1': [[0, 1, 3], [0, 2, 3]], 'e2': [[0, 1, 4], [0, 3, 4]]}
我想通过所有可能的组合列表(在我的例子,即对)(即一个的e2
e1
+一个名单列表等)循环。
与例如更好:
我想遍历所有这些组合:
[0, 1, 3]; [0, 1, 4]
[0, 1, 3]; [0, 3, 4]
[0, 2, 3]; [0, 1, 4]
[0, 2, 3]; [0, 3, 4]
此例词典有两个密钥但在实践中,我不知道有多少键会在我的字典。它可能超过两个。
你能帮忙吗?
答
您正在查找的笛卡尔积之间列表字典的值。为了达到预期的效果,您可以使用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])]
请参阅下文; 'itertools.product(* sites.values())'会做到这一点。 –
或'list(reduce(product,sites.values()))' –
取决于您是否想要获得2元组或n元组(对于dict中的n个条目)。 'itertools.product'将产生n元组。使用'itertools.combinations'你可以指定元组的长度。 –