Mehrstufiges Dictionary elegant erzeugen

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
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Hi Community,

mal wieder eine Frage der Ästhetik:

Wie konstruiere ich mir - zur Laufzeit - ein mehrstufiges Dictionary.
Sagen wir ich will eine art Baumstruktur nachbilden, bei der ich ein Blatt einfügen will.

Code: Alles auswählen

def add_leaf(self, leaf)
    try:
        self.tree[leaf.attribute1][leaf.attribute2][leaf.attribute3].append(leaf)
    except KeyError:
        ...
        self.tree[leaf.attribute1][leaf.attribute2][leaf.attribute3] = []
        self.tree[leaf.attribute1][leaf.attribute2][leaf.attribute3].append(leaf)
Problem ist ja, das ich nicht weiß wo hier genau die Exception geworfen wird.
Ich will aber auch nicht, dass es in riesen großen try except Blöcken ausartet.

In meinem Beispiel ist die Tiefe des Baumes fest = 3!

Hat da jemand eine elegante Methode auf Lager?

Grüße,
anogayales
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Code: Alles auswählen

from collections import defaultdict
tree = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
Aber vielleicht tuts auch eine andere Datenstruktur, das sieht mir doch sehr merkwürdig aus…
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Hi,
ich werde mir mal deinen Vorschlag anschauen.

Hintergrund ist, dass ich eine Kollisionsauflösung mit Listen implementieren will und dazu will ich eben in konstanter Laufzeit feststellen können ob ein Blatt bereits dem Baum hinzugefügt wurde.

Damit es zu keiner Verwirrung kommt: Die unterste Schicht soll dabei die Hashtabelle darstellen.

Wichtig ist auch, dass sich das ganze über JSON einfach serialisieren bzw. deserialisieren lässt.


Grüße,
anogayales
Antworten