我有两个清单:
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。)
答案 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'}]