Geht inkrementieren bei dictionarys nur durch for schleifen?
Mir geht es darum dass ich for schleifen aktuell lerne, datenstrukturen schon eine zeit lang geübt habe, jetzt aber erstmals sehe dass inkrementieren bei dictionarys möglich ist.
Warum funktioniert es denn nicht in dem ersten beispiel:
Beispiel 1:
buchstabe = 'i'
buchstabendict = {}
buchstabendict["i"]+=1 #AUSGABE: keyerror
buchstabendict[buchstabe]+=1 #AUSGABE: keyerror
Beispiel 2:
dict_var = {}
text = "ein beispieltext"
for zeichen in text:
if zeichen in dict_var:
dict_var[zeichen]+=1
else:
dict_var[zeichen] = 1
print(dict_var)
4 Antworten
Weil du in Beispiel 2 den Key hier festlegst
dict_var[zeichen] = 1
In Beispiel 1 kennt python den Key "1" noch nicht, kann den daher auch noch inkrementieren. Wenn du vor dem Inkrementieren
buchstabendict["i"] = 1
schreibst, sollte es funktionieren.
Dictionaries in Python sind wie assoziative Arrays in PHP oder C#. Es sind "key:value"-Paare. Du kannst über die keys loopen, um die Werte zu erhalten. Oder direkt den Key ansprechen.
Bsp. 1 funktioniert nicht wie es andere schon beschrieben haben.
Bsp. 2 wird wohl fehlerfrei durchlaufen, ist jedoch irgendwie sinnfrei.
buchstabe = 'i'
buchstabendict = {}
buchstabendict["i"]+=1 #AUSGABE: keyerror
buchstabendict[buchstabe]+=1 #AUSGABE: keyerror
Der Grund ist: Der Schlüssel existiert noch nicht, sofern der Schlüssel existiert, dann kann der Wert (falls numerisch) natürlich auch inkrementiert werden.
Eine Formulierung die funktioniert, aber kein direktes Inkrement mehr ist:
dict[key]=d.get(key,0)+1
Ansonsten wäre für Dein Beispiel 2 natürlich noch collections.Counter interessant ;-).
Das hat mit Schleifen nicht viel zu tun.
Dein Beispiel 1 funktioniert nicht, weil du versuchst einen nicht existierenden Wert zu erhöhen.