Iteration über verschachteltes DefaultDict optimieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

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
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()`).
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

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.
Antworten