在Python中生成所有可能映射的列表

Edd*_*ett 3 python map set

假设我们有一个映射K - > V,其中域K是一个集合([1,2,3]),共域V从集合中得出(['a','b' ,'C']).是否有一种简洁的方法可以枚举为可迭代(理想情况下是字典的列表或生成器),所有可能的映射:

例如.

[ { 1 : 'a', 2 : 'a', 3 : 'a' },
  { 1 : 'a', 2 : 'a', 3 : 'b' },
  { 1 : 'a', 2 : 'b', 3 : 'a' },
  ...
  { 1 : 'c', 2 : 'c', 3 : 'c' }
]
Run Code Online (Sandbox Code Playgroud)

请注意,域的大小不固定,因此这种解决方案并不理想:

[ { 1 : x, 2 : y,  3 : z } for x in V for y in V for z in V ]
Run Code Online (Sandbox Code Playgroud)

干杯

eca*_*mur 6

使用repeat参数itertools.product:

K = set([1, 2, 3])
V = set(['a', 'b', 'c'])
itertools.product(V, repeat=len(K))
Run Code Online (Sandbox Code Playgroud)

然后你可以dict在理解中构造s:

(dict(zip(K, x)) for x in itertools.product(V, repeat=len(K)))
Run Code Online (Sandbox Code Playgroud)

检查:

>>> len([dict(zip([1, 2, 3], x)) for x in itertools.product('abc', repeat=3)])
27
Run Code Online (Sandbox Code Playgroud)