[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