Collections defaultdict

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
DrRocket
User
Beiträge: 30
Registriert: Freitag 11. Mai 2018, 15:11

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.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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.
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

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.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

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