Dictionaries
Einen Schlüssel nachzuschlagen, der nicht im Dictionary steht, stoppt das Programm mit KeyError, aber d.get(key, 0) gibt stattdessen 0 zurück.
Seoyeon hat 12 Stimmzettel und drei Kandidaten
Diese Tabelle ist ein Dictionary. Ein Dictionary speichert Paare: einen Schlüssel und den Wert, der dazugehört. Du schreibst es in geschweifte Klammern, mit einem Doppelpunkt zwischen jedem Schlüssel und seinem Wert. Um einen Wert zu lesen, setze den Schlüssel in eckige Klammern, so wie du bei einer Liste einen Index dahinter setzt. Um ein Paar hinzuzufügen oder zu ändern, weise diesem Schlüssel etwas zu.
votes = {"Ari": 0, "Bo": 0, "Cy": 0}
votes["Bo"] = votes["Bo"] + 1
votes["Ari"] += 1
votes["Bo"] += 1
print(votes)
print(votes["Bo"]){'Ari': 1, 'Bo': 2, 'Cy': 0}
2Die ganze Kiste in einer Schleife zählen
Eine Zeile pro Stimmzettel zu tippen ist nicht besser als Striche. Seoyeon legt die Stimmzettel in eine Liste und durchläuft sie. Es gibt einen Haken: Was ist, wenn ein Zettel jemanden nennt, den sie nicht vorher angelegt hat, oder sie die Kandidaten lieber nicht zuerst auflisten will? Einen fehlenden Schlüssel mit eckigen Klammern zu lesen stoppt das Programm. Die Methode get(key, default) löst das. Sie gibt den Wert zurück, wenn der Schlüssel da ist, und den Standardwert, wenn nicht, sodass votes.get(name, 0) + 1 für die erste Stimme und jede weitere funktioniert.
ballots = ["Bo", "Ari", "Bo", "Cy", "Bo", "Ari",
"Cy", "Bo", "Ari", "Bo", "Cy", "Bo"]
votes = {}
for name in ballots:
votes[name] = votes.get(name, 0) + 1
print(votes)
print(len(ballots), sum(votes.values())){'Bo': 6, 'Ari': 3, 'Cy': 3}
12 12Die letzte Zeile ist Seoyeons Kontrolle. Zwölf Stimmzettel gingen hinein, und die Zählungen ergeben zwölf, es ging also keiner verloren. Beachte die Reihenfolge der Namen in der Ausgabe: Bo zuerst, weil Bo der erste Name war, dem die Schleife begegnete. Seit Python 3.7 behält ein Dictionary seine Schlüssel in der Reihenfolge, in der sie zuerst hinzugefügt wurden, und der Abschnitt des Tutorials zu Dictionaries sagt dasselbe.
Schlüssel und Werte zusammen durchlaufen
Eine for-Schleife über ein Dictionary liefert die Schlüssel. items() liefert Schlüssel und Wert zusammen, was du für eine Ergebnistabelle willst. in prüft, ob ein Schlüssel existiert, und max() mit key=votes.get findet den Schlüssel mit dem größten Wert. Das Letzte ist ein Muster, das man so übernehmen sollte, wie es ist, noch bevor jeder Teil davon Sinn ergibt.
votes = {"Bo": 6, "Ari": 3, "Cy": 3}
for name, n in votes.items():
print(name, "#" * n, n)
print("Dan" in votes)
print(max(votes, key=votes.get))Bo ###### 6
Ari ### 3
Cy ### 3
False
BoDictionaries tauchen überall auf, wo Daten als Paare aus Name und Wert kommen: ein Wort und seine Bedeutung, eine U-Bahn-Station und ihre Liniennummer, eine Schülernummer und ein Name. Schlüssel müssen eindeutig sein, und das Zuweisen zu einem vorhandenen Schlüssel ersetzt seinen alten Wert, statt eine zweite Kopie hinzuzufügen.
| Dictionary | Schlüssel-Wert-Paare in { } |
| Schlüssel | Der Name, unter dem du einen Wert nachschlägst; Schlüssel sind eindeutig |
| d[key] | Liest den Wert; KeyError, wenn der Schlüssel fehlt |
| d.get(key, default) | Liest den Wert oder gibt den Standardwert, wenn der Schlüssel fehlt |
| d.items() | Schlüssel-Wert-Paare für eine for-Schleife |
| key in d | True, wenn das Dictionary diesen Schlüssel hat |
- Was gibt das aus?
price = {"gimbap": 3500, "ramen": 4500} print(price["ramen"]) - Was gibt das aus?
price = {"gimbap": 3500} price["tteokbokki"] = 5000 print(len(price)) - Was gibt das aus?
price = {"gimbap": 3500} price["gimbap"] = 4000 print(price) - Was gibt das aus?
stock = {"pens": 4} print(stock.get("pens", 0), stock.get("tape", 0)) - Was passiert beim Ausführen?
stock = {"pens": 4} print(stock["tape"])- Es gibt 0 aus
- Es gibt None aus
- Es gibt tape aus
- Es stoppt mit KeyError: 'tape'
- Was gibt das aus?
counts = {} for ch in "hello": counts[ch] = counts.get(ch, 0) + 1 print(counts["l"]) - Was gibt das aus?
ages = {"Mina": 14, "Jun": 13} print("Jun" in ages, 14 in ages) - Was gibt das aus?
d = {"b": 2, "a": 1} for k in d: print(k)a
bb
a2
1b 2
a 1
- Was gibt das aus?
scores = {"Ari": 3, "Bo": 6, "Cy": 3} print(max(scores, key=scores.get)) - Was gibt das aus?
d = {"x": 1, "y": 2} total = 0 for k, v in d.items(): total += v print(total)
- „votes["Dan"] ergibt 0, wenn Dan keine Stimmen bekam.“ Wurde "Dan" nie als Schlüssel hinzugefügt, stoppt das Nachschlagen mit KeyError: 'Dan'. Nutze votes.get("Dan", 0), wenn ein Schlüssel fehlen kann.
- „14 in ages prüft, ob jemand 14 ist.“ in schaut auf Schlüssel, nicht auf Werte. Um in den Werten zu suchen, schreibe 14 in ages.values().
- „Dictionaries haben Positionen wie Listen, also ist votes[0] der erste Kandidat.“ Ein Dictionary wird über den Schlüssel nachgeschlagen, nicht über die Position. votes[0] sucht einen Schlüssel gleich 0 und ergibt KeyError: 0.
- Ein Dictionary speichert key: value-Paare in { }.
- d[key] liest einen Wert; ein fehlender Schlüssel ergibt KeyError.
- d.get(key, default) vermeidet den KeyError.
- counts[x] = counts.get(x, 0) + 1 ist das Zählmuster.
- for k, v in d.items(): geht Paare in der Reihenfolge durch, in der sie hinzugefügt wurden.
Quellen zu diesem Kurs (6)
- Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
- Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
- Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
- General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
- Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
- Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)
Abgerufen: 2026-10-19