produit cartésien dictionnaire

Document Actions
Réponses: 1   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

produit cartésien dictionnaire

Posté par troisseize le 24/06/2009 12:26
Bonjour!

Je cherche à écrire une fonction dont les spécifications seraient:
- elle prend en argument un dictionnaire,
- les valeurs du dictionnaire sont des scalaires ou des listes,
- cette fonction est un iterator qui itere sur tous les dictionnaires que l'on peut former en prenant au choix un élément dans les valeurs du dictonnaire d'entrée (pas très clair...)

Voici 'stub' (on dit comme ça?) de la fonction: (je n'arrive pas mettre d'indentation dans le post, donc je le joins en fichier)
def dict_cartesian_product(d):\n
e1 = {'un':'1a','deux':'2','trois':'3','quatre':'4','cinq':'5a'}
e2 = {'un':'1a','deux':'2','trois':'3','quatre':'4','cinq':'5b'}

e3 = {'un':'1b','deux':'2','trois':'3','quatre':'4','cinq':'5a'}
e4 = {'un':'1b','deux':'2','trois':'3','quatre':'4','cinq':'5b'}

e5 = {'un':'1c','deux':'2','trois':'3','quatre':'4','cinq':'5a'}
e6 = {'un':'1c','deux':'2','trois':'3','quatre':'4','cinq':'5b'}

for e in:
yield e

d = {'un':['1a','1b','1c'],
'deux':'2',
'trois':'3',
'quatre':'4',
'cinq':['5a','5b']}

for e in dict_cartesian_product(d):
print e

Pour créer cette fonction j'essaie de m'inspiré de ça
http://docs.python.org/3.0/library/itertools.html?highlight=product#itertools.product

mais je galère un peu...

Je me demande si je ne pourrais pas aussi tirer profit de certaines fonction de numpy.

Si une bonne âme passe par là et peu m'aider...

Re: produit cartésien dictionnaire

Posté par troisseize le 24/06/2009 14:43
J'ai finalement compris pourquoi je galère: mon dictionnaire de test était mal choisis, car lorsque les valeurs scalaires '2' ou '3' ou '4' sont des chaines de caractères de longueur >1, on se retrouve à itérer sur la chaine de caractère, ce que l'on ne veut pas.

Voici une solution en pièce jointe si ça interesse qqn, mais ce n'est pas optimisé et j'ai peur que ça plante vite quand on augmente la taille du dictionnaire.

Python.org : Le site officiel du langage Python.
Zope.org : Le site web officiel de Zope.
Daily Python-URL : Actus de l'univers Python.
Tribute to Zyons : Zyons notre ami et membre fondateur de l'Afpy, nous quittait en 2005.