2017-06-03 2 views
2

J'ai deux listes:Combinaison d'une liste avec les permutations d'une autre liste

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

Je veux en sortie une liste de dictionnaires:

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

etc.

Ainsi, les objets don répétez, mais les descriptions peuvent. Chaque dictionnaire a pour clés la liste originale des objets.

Je ne suis pas sûr du nom de l'algorithme que je veux, donc je vais avoir du mal à trouver le bon. (Je l'ai regardé permutations of two lists in python, mais qui est cherche un résultat différent. Permutations of two lists est la même question, mais en utilisant OCAML.)

+0

Cette question est une copie de « produit cartésien donnant un dictionnaire », mais pas de « Opération sur chaque paire de élément dans une liste ". – Ollyver

+0

BTW, vous ne devriez pas utiliser 'object' comme nom de variable parce que les ombres du type' object' intégré. Il ne fera pas mal quoi que ce soit ici, mais il semble étrange dans un surligneur de syntaxe correcte. Et il causera des messages d'erreur étranges si le code récent utilise des définitions de classe nouveau style Python 2: 'class MaClasse (objet):'. –

Répondre

5

Vous pouvez utiliser itertools.product pour générer toutes les combinaisons possibles de votre descriptions.

Ensuite, créez un dictionnaire avec le objects comme des touches et de la « combinaison » comme valeurs:

>>> 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'}]