列表与另一个列表的排列的组合

时间:2017-06-03 14:58:58

标签: python algorithm combinations

我有两个清单:

object = ['square','circle','triangle']
description = ['red','green']

我想要输出一个词典列表:

{'square': 'red', 'circle': 'red', 'triangle': 'red'}
{'square': 'red', 'circle': 'red', 'triangle': 'green'}
{'square': 'green', 'circle': 'red', 'triangle': 'green'}

因此,对象不会重复,但描述可能会重复。每个字典都有原始的对象列表作为其键。

我不确定我想要的算法的名称,所以我找不到正确的算法。 (我已经查看了permutations of two lists in python,但是他们正在寻求不同的结果。Permutations of two lists是同一个问题,但是使用了OCAML。)

1 个答案:

答案 0 :(得分:5)

您可以使用itertools.product生成descriptions的所有可能组合。

然后创建一个字典,其中objects为关键字,"组合"作为价值观:

>>> import itertools

>>> objects = ['square','circle','triangle']
>>> description = ['red','green']

>>> [dict(zip(objects, comb)) for comb in itertools.product(description, repeat=len(objects))]
[{'circle': 'red', 'square': 'red', 'triangle': 'red'},
 {'circle': 'red', 'square': 'red', 'triangle': 'green'},
 {'circle': 'green', 'square': 'red', 'triangle': 'red'},
 {'circle': 'green', 'square': 'red', 'triangle': 'green'},
 {'circle': 'red', 'square': 'green', 'triangle': 'red'},
 {'circle': 'red', 'square': 'green', 'triangle': 'green'},
 {'circle': 'green', 'square': 'green', 'triangle': 'red'},
 {'circle': 'green', 'square': 'green', 'triangle': 'green'}]