Dies scheint eine ziemlich geradlinige Verwendung von setdefault und defaultdict zu sein, die ich nicht verstehen kann, wäre es toll, wenn jemand erklären könnte, "warum" der Code unten funktioniert.Verhalten von DefaultDict in Python 2.7
d = {}
for name in ['foo', 'bar', 'bars']:
t = d
for char in name:
t = t.setdefault(char,{}) # Should be a empty {}
print d
# Prints {'b': {'a': {'r': {'s': {}}}}, 'f': {'o': {'o': {}}}}
Ich bin nicht in der Lage zu verstehen, wie dieses Stück Code funktioniert. Wenn die Zeile t = t.setdefault (char, {}) ausgeführt wird, sollte sie t ein leeres Wörterbuch zuweisen, aber wie wirkt es sich auf d aus, so dass d zu einem verschachtelten Wörterbuch wird?
Auch was wäre das Äquivalent von dem oben, wenn ich das defaultdict verwenden würde. Ich kam mit dieser, die falsch ist:
d1 = defaultdict(dict)
for name in ['foo', 'bar', 'bars']:
t1 = d1
for char in name:
t1 = t1[char]
print d1
Es wäre toll, wenn jemand als darauf hinzuweisen könnte, wie man defaultdicts
Wie bei Listen, 't' und 'd' beide auf das gleiche dict-Objekt. Wenn sich "t" ändert, ändert sich auch "d". –
Ok, ich verstehe jetzt die Idee. Wenn also die Anweisung t = t.setdefault (char, {}) ausgeführt wird, mutiert der Teil ** t.setdefault (char, {}) ** das Wörterbuch d, und da die rechte Seite zu {} auswertet, ist t einstellen {}. Wäre dieses Verständnis korrekt? –
@VikashRajaSamuelSelvin: Ihr Verständnis ist richtig. Das Programm würde genauso funktionieren und klarer sein, wenn es die Variable "t" überhaupt nicht benutzt hätte, und nur ein '_ = d.setdefault (char, {})'. Die Unterstreichungsvariable würde einen Hinweis geben, dass diese Zuweisung gerade weggeworfen wurde (was ist). – Gerrat