Seite 1 von 1

Collections defaultdict

Verfasst: Mittwoch 2. Januar 2019, 22:32
von DrRocket
Hi,

wenn ich ein defaultdict nutzen möchte, um die "Key Error" exception zu umgehen falls ein key abgefragt wird, der nicht im dictionary drin ist, was ist beim Erstellen des dictionaries zu beachten bzw. warum funktioniert das in nachfolgendem Beispiel nicht?

Code: Alles auswählen

import collections

categories = {"Erstzulassung", "Kilometerstand", "Kraftstoff", "Getriebe", "Bruttolistenpreis",
              "Kaufpreis", "Anzahlung", "Laufzeit"}

test_dict = collections.defaultdict(str)
test_dict = {"Erstzulassung": "26.04.2018"}

print(type(categories))
print(type(test_dict))

print("Erstzulassung", test_dict["Erstzulassung"])
print("Kilometerstand", test_dict["Kilometerstand"])
Ich bekomme den "KeyError: 'Kilometerstand'". Den Datentyp im defaultdict habe ich variiert, allerdings mit dem gleichen Ergebnis.

Re: Collections defaultdict

Verfasst: Mittwoch 2. Januar 2019, 22:47
von sls
Hast du dir denn die Dokumentation zu defaultdict mal reingezogen? Du überschreibst `test_dict` eiskalt in dem du eine erneute Deklaration vornimmst (test_dict = {"Erstzulassung": "26.04.2018"}). Du musst die Werte dem dict hinzufügen, dafür gibt es Methoden.

Re: Collections defaultdict

Verfasst: Mittwoch 2. Januar 2019, 23:22
von __blackjack__
@DrRocket: Es ist weniger die Frage was beim erstellen zu beachten ist, sondern eher zu beachten, dass man es nach dem erstellen auch *benutzt*. Dir hätte bei der Ausgabe vom Typ vom `test_dict` doch auffallen sollen, dass das zu dem Zeitpunkt gar kein `defaultdict` ist, sondern das Du den Namen wieder an ein ganz normales `dict` gebunden hast.

Re: Collections defaultdict

Verfasst: Donnerstag 3. Januar 2019, 07:20
von sparrow
Ein normales dict kennt die .get(key, default_value) Methode, mit der man einen vorgegebenen Wert zurückliefern lassen kann, sollte der Key nicht im dict sein.

Re: Collections defaultdict

Verfasst: Donnerstag 3. Januar 2019, 07:50
von nezzcarth
sparrow hat geschrieben: Donnerstag 3. Januar 2019, 07:20 Ein normales dict kennt die .get(key, default_value) Methode, mit der man einen vorgegebenen Wert zurückliefern lassen kann, sollte der Key nicht im dict sein.
Sowie 'setdefault', was in vielen Fällen eine Alternative zum Defaultdict sein kann.

Re: Collections defaultdict

Verfasst: Donnerstag 3. Januar 2019, 08:49
von Sirius3
@nezzcarth: setdefault ist in diesem Fall nicht das richtige, weil ja nur was abgefragt werden soll.
@DrRocket: defaultdict sieht in Deinem Fall nicht richtig aus, bei fehlenden Keys würde man eher `get` verwenden.