VFX Soupe
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

[Python] set intersection / itertools combinations ?

2 participants

Aller en bas

[Python] set intersection / itertools combinations ? Empty [Python] set intersection / itertools combinations ?

Message par Deex Jeu 3 Nov 2011 - 2:27

Bonsoir,
J'ai un petit problème d'algo que j'arrive pas a résoudre, j'ai la tête qui chauffe...
Je sais que certains codeurs passent par ici.

J'ai un dico avec une liste d'objets dans chaque clé, genre :
Code :

Code:
allGroups = {"property1":["object1", "object2", "object3", "object4"], "property2":["object1, "object2", "object4"], "property3":["object2", "object3", "object4"], "property4":["object1"], "property5":[]}

J'aimerais a partir de ça, générer des "groupes" d'objects qui étaient dans chaque keys.
C'est a dire ici :

result1 = ["object1"] a la property1, property2, property4
result2 = ["object2", "object4"] a la property1, property2, property3
result3 = ["object3"] a la property1, property3
etc etc....

Chaque objet ne peut pas être dans un autre groupe.

Et évidement, de quoi retrouver les propriétés d'un result, donc, le sortir en dico, genre :
Code:
{ ["property1", "property2", "property4"]:["object1"]}
{ ["property1", "property2", "property3"]:["object2", "object4"]}
par exemple, etc etc...

Un chemin a me donner ? Sans parser chaque object évidement.
J'ai regarde du cote des set intersection du coup, puis dans les itertools.combinations, ben ça devient chaud...
Merci
Deex
Deex
2ème commis
2ème commis

Nombre de messages : 445
Age : 37
Localisation : Santa Monica
Date d'inscription : 11/03/2008

http://deex.info/

Revenir en haut Aller en bas

[Python] set intersection / itertools combinations ? Empty Re: [Python] set intersection / itertools combinations ?

Message par Kender Jeu 3 Nov 2011 - 12:50

C'est ce que tu cherches ?

Code:
allGroups = {
        'property1':['obj1', 'obj2', 'obj3', 'obj4'],
        'property2':['obj1', 'obj2'],
        'property3':['obj1', 'obj3']
}

objects = {}

for prop, objs in allGroups.items():

        for obj in objs:

                if not obj in objects.keys():
                        objects[obj] = []

                objects[obj].append(prop)

print objects

K

Kender
2ème commis
2ème commis

Nombre de messages : 642
Age : 43
Localisation : Montreal, Canada
Date d'inscription : 28/07/2009

http://www.cgstudiomap.org

Revenir en haut Aller en bas

[Python] set intersection / itertools combinations ? Empty Re: [Python] set intersection / itertools combinations ?

Message par Deex Jeu 3 Nov 2011 - 14:44

Yep, non.
La ca print :
Code:
{'obj1': ['property1', 'property2', 'property3'], 'obj3': ['property1', 'property3'], 'obj2': ['property1', 'property2'], 'obj4': ['property1']}
Hors si on a genre un dico comme ca :

Code:
allGroups = {
        'property1':['obj1', 'obj2', 'obj3', 'obj4'],
        'property2':['obj1', 'obj2'],
        'property3':['obj1', 'obj3', 'obj2']
}

On aura :
Code:
{'obj1': ['property1', 'property2', 'property3'], 'obj3': ['property1', 'property3'], 'obj2': ['property1', 'property2', 'property3'], 'obj4': ['property1']}
Ce qui est pas bon car l'obj1 et 2 ce repetent...

Enfaite il me faut ca :
Code:
{['property1', 'property2', 'property3']:["obj1", "obj2"], ['property1', 'property3']:["obj3"]} etc etc

Tout "regouper" par property.
SI possible, ne pas parcourir chaques obj, mais le faire avec des sets..(parce qu'au final je pourrais avoir plus de 10000 obj.)
Deex
Deex
2ème commis
2ème commis

Nombre de messages : 445
Age : 37
Localisation : Santa Monica
Date d'inscription : 11/03/2008

http://deex.info/

Revenir en haut Aller en bas

[Python] set intersection / itertools combinations ? Empty Re: [Python] set intersection / itertools combinations ?

Message par Deex Jeu 3 Nov 2011 - 17:54

Trouve. Voila la soluce :

Code:
allGroups = {'blackHoleMembers': [nt.Mesh(u'pSphereShape1'), nt.Mesh(u'pCylinderShape2'), nt.Mesh(u'pConeShape1')], 'refractionMembersOff': [], 'primaryMembersOff': [], 'blackHoleMembersReceiveShd': [nt.Mesh(u'pSphereShape1'), nt.Mesh(u'pCylinderShape2'), nt.Mesh(u'pConeShape2')], 'giMembersGenerate': [nt.Mesh(u'pSphereShape1'), nt.Mesh(u'pCylinderShape2'), nt.Mesh(u'pConeShape1')], 'reflectionMembersOff': [nt.Mesh(u'pConeShape2')], 'giMembersReceive': [nt.Mesh(u'pSphereShape1'), nt.Mesh(u'pCylinderShape2')], 'shadowCastsMembersOff': []}


dicoInverse={}
        for p in allGroups.keys():
            for o in allGroups[p]:
                if dicoInverse.has_key(o):
                    dicoInverse[o].append(p)
                else:
                    dicoInverse[o]=[]
                    dicoInverse[o].append(p)
        liste={}
        for dk in dicoInverse.keys():
            if liste.has_key(str(dicoInverse[dk])):
                liste[str(dicoInverse[dk])].append(dk)
            else:
                liste[str(dicoInverse[dk])]=[]
                liste[str(dicoInverse[dk])].append(dk)
        liste_finale={}
       
        for lk in liste.keys():
            liste_finale[str(liste[lk])]=lk
       
        for result in liste_finale:
            print "Groupe with property : " + str(liste_finale[result]) + " have object(s) : "
            for myObject in eval(result):
                print "            " + myObject



Result :

Groupe with property : ['blackHoleMembers', 'giMembersGenerate'] have object(s) :
pConeShape1
Groupe with property : ['blackHoleMembers', 'blackHoleMembersReceiveShd', 'giMembersGenerate', 'giMembersReceive'] have object(s) :
pSphereShape1
pCylinderShape2
Groupe with property : ['blackHoleMembersReceiveShd', 'reflectionMembersOff'] have object(s) :
pConeShape2
Deex
Deex
2ème commis
2ème commis

Nombre de messages : 445
Age : 37
Localisation : Santa Monica
Date d'inscription : 11/03/2008

http://deex.info/

Revenir en haut Aller en bas

[Python] set intersection / itertools combinations ? Empty Re: [Python] set intersection / itertools combinations ?

Message par Kender Jeu 3 Nov 2011 - 18:44

bien joue

pourquoi tu as besoin de ca au fait ?

Kender
2ème commis
2ème commis

Nombre de messages : 642
Age : 43
Localisation : Montreal, Canada
Date d'inscription : 28/07/2009

http://www.cgstudiomap.org

Revenir en haut Aller en bas

[Python] set intersection / itertools combinations ? Empty Re: [Python] set intersection / itertools combinations ?

Message par Deex Jeu 3 Nov 2011 - 19:59

Surprise... Very Happy
J'en dirais plus a la version 1...
Deex
Deex
2ème commis
2ème commis

Nombre de messages : 445
Age : 37
Localisation : Santa Monica
Date d'inscription : 11/03/2008

http://deex.info/

Revenir en haut Aller en bas

[Python] set intersection / itertools combinations ? Empty Re: [Python] set intersection / itertools combinations ?

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum