Seite 1 von 1

Iteration über verschachteltes DefaultDict optimieren

Verfasst: Montag 25. März 2013, 17:21
von Herr Lehmann
Hallo,

ich bin mal wieder ein bisschen überfordert mit collections und itertools :K

Habe mir folgendes gebastelt:

Code: Alles auswählen

from collections import defaultdict

conns = defaultdict(lambda: defaultdict(list))
conns["EDUARD"]["OLD"].append("AlteVerbindung1")
conns["EDUARD"]["NEW"].append("Neue Verbindung")

Jetzt möchte ich mir alle Verbindungen anzeigen lassen also alte und neue und da bin ich mir sicher das es eine elegantere Lösung gibt:

Code: Alles auswählen

for k,a in conns.iteritems():
    for kl,b in a.iteritems():   
        for conn in b:
            print conn

Re: Iteration über verschachteltes DefaultDict optimieren

Verfasst: Montag 25. März 2013, 17:32
von BlackJack
@Herr Lehmann: Da `k` und `kl` nicht verwendet werden sollte man sie weglassen und nur über die Werte der Wörterbücher iterieren (`itervalues()`).

Re: Iteration über verschachteltes DefaultDict optimieren

Verfasst: Montag 25. März 2013, 17:50
von Herr Lehmann
Danke BJ, die Lösung hatte ich nur so aus dem Kopf hin geklatscht. Wo ich mit mit meiner Frage drauf hinaus wollte, waren so Dinge wie itertools.chains u.ä

Wenn ich ein "normales" defaultdict(list) habe, geht es bspw mit:

Code: Alles auswählen

 for v in itertools.chain.from_iterable(conns.itervalues()):
	print v
Ich dachte so eine pythonische Lösung könnte es auch für mein defaultdict(lambda: defaultdict(list)) geben. Und vor allem versuche ich diese Funktionen mal 100% zu verstehen.