[Python] set intersection / itertools combinations ?
2 participants
Page 1 sur 1
[Python] set intersection / itertools combinations ?
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 :
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 :
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
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"]}
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
Re: [Python] set intersection / itertools combinations ?
C'est ce que tu cherches ?
K
- 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
Re: [Python] set intersection / itertools combinations ?
Yep, non.
La ca print :
On aura :
Enfaite il me faut ca :
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.)
La ca print :
- Code:
{'obj1': ['property1', 'property2', 'property3'], 'obj3': ['property1', 'property3'], 'obj2': ['property1', 'property2'], 'obj4': ['property1']}
- 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']}
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.)
Re: [Python] set intersection / itertools combinations ?
Trouve. Voila la soluce :
Result :
- 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
Re: [Python] set intersection / itertools combinations ?
bien joue
pourquoi tu as besoin de ca au fait ?
pourquoi tu as besoin de ca au fait ?
Re: [Python] set intersection / itertools combinations ?
Surprise...
J'en dirais plus a la version 1...
J'en dirais plus a la version 1...
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum