Seite 1 von 1

Mehrstufiges Dictionary elegant erzeugen

Verfasst: Montag 21. Juni 2010, 22:55
von anogayales
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

Re: Mehrstufiges Dictionary elegant erzeugen

Verfasst: Montag 21. Juni 2010, 23:06
von Darii

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…

Re: Mehrstufiges Dictionary elegant erzeugen

Verfasst: Montag 21. Juni 2010, 23:12
von anogayales
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