Nested defaultdict

13/08/2011 - 23:34 von Wandfliese | Report spam
Guten Abend,

oft stehe ich vor der Aufgabe Logdateien auszuwerten um beispielsweise
festzustellen wann welche Seite aufgerufen wurde. Hierbei hat mir
defaultdict(list) gute Dienste geleistet aber oftmals habe ich mir
gewünscht mehrere defaultdict's ineinander zu verschachteln.

Habe dazu folgende Funktion gebastelt, die mir ein n-fach
verschachteltes defaultdict zurückgeben sollte

def nestedDict(factory, n):
superClass = defaultdict(factory)
for i in range(n-1):
superClass = defaultdict(lambda : superClass)
return superClass

Leider legt der Rückgabewert ein seltsames Verhalten an den Tag
wohingegen defaultdict(lambda:defaultdict(list)) das gewünschte
leistet.

Könnte ihr mir erklàren was da schief làuft?

Beste Grüße

Wandfliese

P.S.: Gibt es eine Abkürzung für for i in range(n): falls die Variable
i nicht verwendet wird?
 

Lesen sie die antworten

#1 Diez B. Roggisch
14/08/2011 - 00:01 | Warnen spam
Das Problem ist das du superClass immer wieder neu bindest, und das lambda einen Closure bildet mit dem letzten wert.

Benutz stattdessen

lambda superClass=superClass : ...

Das bindet den wert zur Konstruktion

Diez

Am 13.08.2011 um 23:34 schrieb Wandfliese :

Guten Abend,

oft stehe ich vor der Aufgabe Logdateien auszuwerten um beispielsweise
festzustellen wann welche Seite aufgerufen wurde. Hierbei hat mir
defaultdict(list) gute Dienste geleistet aber oftmals habe ich mir
gewünscht mehrere defaultdict's ineinander zu verschachteln.

Habe dazu folgende Funktion gebastelt, die mir ein n-fach
verschachteltes defaultdict zurückgeben sollte

def nestedDict(factory, n):
superClass = defaultdict(factory)
for i in range(n-1):
superClass = defaultdict(lambda : superClass)
return superClass

Leider legt der Rückgabewert ein seltsames Verhalten an den Tag
wohingegen defaultdict(lambda:defaultdict(list)) das gewünschte
leistet.

Könnte ihr mir erklàren was da schief làuft?

Beste Grüße

Wandfliese

P.S.: Gibt es eine Abkürzung für for i in range(n): falls die Variable
i nicht verwendet wird?
_______________________________________________
python-de maillist -
http://mail.python.org/mailman/listinfo/python-de

Ähnliche fragen