alonzo hat geschrieben:
Bisher habe ich vorausgesetzt, dass man Datentypen nicht explizit initialisieren muss. Wie sich zeigt - weit gefehlt.
Du musst in Python nichts *deklarieren* (im Gegensatz zu vielen statisch typisierten Sprachen), aber natürlich musst Du Objekte *erzeugen*!
Ich weiß nicht, ob das aus cofis Post deutlich geworden ist, aber ``collections.defaultdict`` zaubert auch nichts aus dem Hut, sondern dürfte intern analog zu diesem Beispiel mit herkömmlichem Dictionary funktionieren:
Code: Alles auswählen
# wir erzeugen das top level Dictionary
adressbuch = dict()
# wir prüfen, ob noch kein Eintrag für einen gegebeben Schlüssel
# existiert und implizieren damit, dass wir das *innere* Dictionary
# neu anlegen müssen
if "1" not in adressbuch.keys():
# wir erzeugen ein inneres Dictionary
adressbuch["1"] = dict()
# wir können nun hier problemlos Key-Value-Paare im *inneren*
# Dictionary setzen, da wir sicher sind, dass dieses existiert.
adressbuch["1"]["name"] = "alonzo"
#--top level---|---inneres dict---
(``defaultdict`` sieht ja stark nach Decorator-Pattern aus - sollte ich mir mal im Quellcode angucken
)
Wenn man nur das äußere Dictionary anlegt, dann muss man natürlich ganz normal Einträge vornehmen und Key-Value-Paare anlegen. Der Value-Part besteht hier eben wieder aus einem Dictionary, welches die Adressdetails beinhaltet. Das kann aber jedes beliebige Python-Objekt sein! (Also auch Funktionen, Lambdas, usw.) Natürlich muss man dieses Objekte erzeugen, wenn man sie braucht. ``defaultdict`` macht da nichts anderes, was man nicht auch "zu Fuß" umsetzen kann.
Ich denke schon, dass Du Dir selber auch Beispiele zum Thema Datenstrukturen ausdenken solltest. Natürlich schadet es nicht, Dir noch einmal die Basics anzugucken, aber Du musst das ja auch üben. Und das passiert nur durchs Ausprobieren