[Python-de] Nested defaultdict

Diez B. Roggisch deets at web.de
So Aug 14 00:01:24 CEST 2011


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 <jonas.fiege at googlemail.com>:

> 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  -  python-de at python.org
> http://mail.python.org/mailman/listinfo/python-de
> 


Mehr Informationen über die Mailingliste python-de