Dies ist ein Teil Algorithmus-Logik-Frage (wie es gemacht wird), Teil-Implementierung Frage (wie es am besten geht!). Ich arbeite mit Django, also dachte ich, ich würde das teilen. In Python ist es erwähnenswert, dass das Problem etwas mit how-do-i-use-pythons-itertoolsgroupby zusammenhängt.Django/Python - Gruppieren von Objekten nach gemeinsamen Satz von einer Viele-zu-viele-Beziehungen
Angenommen, Sie sind bei zwei Django Modell abgeleiteten Klassen:
from django.db import models
class Car(models.Model):
mods = models.ManyToManyField(Representative)
und
from django.db import models
class Mods(models.Model):
...
Wie man eine Liste von Autos, von Autos mit einem gemeinsamen Satz von Mods gruppiert bekommt?
I.e. Ich möchte eine Klasse likeso erhalten:
Cars_by_common_mods = [
{ mods: { 'a' }, cars: { 'W1', 'W2' } },
{ mods: { 'a', 'b' }, cars: { 'X1', 'X2', 'X3' }, },
{ mods: { 'b' }, cars: { 'Y1', 'Y2' } },
{ mods: { 'a', 'b', 'c' }, cars: { 'Z1' } },
]
Ich habe wie von etwas gedacht:
def cars_by_common_mods():
cars = Cars.objects.all()
mod_list = []
for car in cars:
mod_list.append({ 'car': car, 'mods': list(car.mods.all()) }
ret = []
for key, mods_group in groupby(list(mods), lambda x: set(x.mods)):
ret.append(mods_group)
return ret
jedoch nicht, weil nicht funktioniert (vielleicht unter anderem) die groupby nicht scheinen nach den Mods-Sets zu gruppieren. Ich denke, die mod_list muss so sortiert werden, dass sie mit groupby funktioniert. Alles in allem bin ich zuversichtlich, dass es da draußen etwas Einfaches und Elegantes gibt, das sowohl erhellend als auch erhellend sein wird.
Prost & danke!
Danke für die Antwort. Ich habe mich umgruppiert, aber das (unausgesprochene) Problem ist, dass es nach den anfänglichen Gruppierungen mehr Logik gibt. Es ist ein guter Tipp, obwohl; werde sehen, ob ich es umgruppieren kann. –