Verschachtelte Listen und Dicts auflisten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Hallo,

ich habe mehrere verschachtelte Dicts und Listen (außen Dicts, und nach Innen hin mehre Listen, teilweise verschachtelt), möchte nun alle Elemente in einer Liste zusammenfassen (komplett ohne Verschachtelung)...
Wie löse ich das denn am besten?
Ich habe mir überlegt, mit einer Schleife alle Elemente durchzugehen, und dann zu überprüfen, ob die Elemente vom Typ Dict oder List sind, und dann nochmal durchgehen. Aber da ich ja im Vorraus noch nicht weiß, wie tief es verschachtelt ist, kann ich ja nicht ewig durchgehen.

Hoffe da hat jemand ne elegante Lösung... ist sicher nur ein blöder Denkfehler bei mir, und es geht ganz pythontypisch irgendwie ganz einfach :)


LG Chris
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Koenntest du da mal ein Beispiel geben?

Ansonsten scheint es mir am besten das mit Klassen zu loesen, anstatt das so tief zu verschachteln.
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Also, ich möchte es mal erklären, was ich machen möchte...
ich habe diverse Produkte, die alle mit .hash einen Hash bilden können.

diese sind dann in der Liste products zusammengefasst,
mit products[hash] = [] in einer Liste.
So werden gleichartige Produkte anhand ihres Hashes zusammengefasst.
nun möchte ich, wenn ich ein Produkt nachträglich ändere (es also dadurch einen neuen Hash bekommt), die Liste neu generieren. Ich brauche also alle Produkte in ihrer elementaren Form, um die Liste neu zu bilden.

Ich hoffe, das ist etwas klarer. Wollte mein Problem eigentlich abstrakter erklären, aber so ist es wohl doch einfacher :)

Vielen Dank.
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

Wenn ich dich richtig verstehe hast du eine Produktliste deren Elemente Hashes mit Produktspezifikation sind.

Statt bei jeder Änderung der Spezifikationen ein neues Hash zu bilden solltest du das vorhandene Hash ändern, auf die deine Liste verweist, dann brauchst du deine Liste auch nicht aktualisieren.

Das ist aber immer noch ein komisches Design...am besten wäre wenn die Elemente deiner Produktliste Produktobjekte wären.

Das Spezifikationshash wäre als Attribut deines Objekts gekapselt, die Methoden der Klasse Produkt würden nur auf diesem internen Attribut operieren.

EDIT:
Statt eine weitere Schachtelungstiefe hinzuzufügen also

Produktliste -> Produktobjekte -> Spezifikationshash -> Spezifikation

könntest du natürlich auch die Spezifikationen direkt als Attribute des Objektes abspeichern

Produktliste -> Produktobjekte -> Spezifikation

(Objekte kann man sich als besondere Hashs denken)

Dann hättest du eventuell Kopfschmerzen wenn du den Objekten irgendwann interne Attribute hinzufügen möchtest, die nicht als Spezifikationen gelistet werden sollen. (allerdings habe ich die Vermutung dass das dich nicht kratzt)
Antworten