Woordenboeken
Een ontbrekende woordenboeksleutel opzoeken stopt het programma met KeyError, maar d.get(key, 0) geeft in plaats daarvan 0.
Seoyeon heeft 12 stembiljetten en drie kandidaten
Die tabel is een woordenboek. Een woordenboek bewaart paren: een sleutel en de bijbehorende waarde. Je schrijft het tussen accolades, met een dubbele punt tussen sleutel en waarde. Zet de sleutel tussen vierkante haken om een waarde te lezen, zoals een index na een lijst. Ken aan die sleutel toe om een paar toe te voegen of te veranderen.
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}
2De hele doos tellen in één lus
Eén regel per biljet typen is niet beter dan turven. Seoyeon zet de biljetten in een lijst en loopt erdoor. Eén probleem: wat als een biljet iemand noemt die niet vooraf is ingesteld, of ze de kandidaten liever niet eerst opschrijft? Een ontbrekende sleutel met haken lezen stopt het programma. De methode get(key, default) lost dit op. Zij geeft de waarde bij een bestaande sleutel en anders de standaard, dus votes.get(name, 0) + 1 werkt voor de eerste en elke volgende stem.
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 12De laatste regel is Seoyeons controle. Er gingen twaalf biljetten in en de tellingen tellen op tot twaalf, dus er is niet één biljet kwijtgeraakt. Let op de volgorde van de namen in de uitvoer: Bo staat eerst, omdat de lus die naam eerst tegenkwam. Sinds Python 3.7 bewaart een woordenboek sleutels in de volgorde van eerste toevoeging; de handleiding zegt hetzelfde in het onderdeel over woordenboeken.
Samen door sleutels en waarden lopen
Een for-lus over een woordenboek geeft sleutels. items() geeft sleutel en waarde samen, handig voor een resultatentabel. in test of een sleutel bestaat en max() met key=votes.get vindt de sleutel met de grootste waarde. Dat laatste patroon kun je letterlijk overnemen, ook voordat elk onderdeel duidelijk is.
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
BoWoordenboeken komen overal voor waar gegevens uit paren van een naam en een waarde bestaan: een woord en zijn betekenis, een metrostation en zijn lijnnummer, een leerlingnummer en een naam. Sleutels moeten uniek zijn; toekennen aan een bestaande sleutel vervangt de oude waarde in plaats van een tweede kopie toe te voegen.
| woordenboek | Sleutel: waarde-paren in { } |
| sleutel | De naam waarmee je een waarde opzoekt; sleutels zijn uniek |
| d[key] | Leest de waarde; KeyError als de sleutel ontbreekt |
| d.get(key, default) | Leest de waarde of geeft de standaard als de sleutel ontbreekt |
| d.items() | Sleutel-waardeparen voor een for-lus |
| key in d | True als het woordenboek die sleutel heeft |
- Wat drukt deze code af?
price = {"gimbap": 3500, "ramen": 4500} print(price["ramen"]) - Wat drukt deze code af?
price = {"gimbap": 3500} price["tteokbokki"] = 5000 print(len(price)) - Wat drukt deze code af?
price = {"gimbap": 3500} price["gimbap"] = 4000 print(price) - Wat drukt deze code af?
stock = {"pens": 4} print(stock.get("pens", 0), stock.get("tape", 0)) - Wat gebeurt er wanneer dit wordt uitgevoerd?
stock = {"pens": 4} print(stock["tape"])- Het drukt 0 af
- Het drukt None af
- Het drukt tape af
- Het stopt met KeyError: 'tape'
- Wat drukt deze code af?
counts = {} for ch in "hallo": counts[ch] = counts.get(ch, 0) + 1 print(counts["l"]) - Wat drukt deze code af?
ages = {"Mina": 14, "Jun": 13} print("Jun" in ages, 14 in ages) - Wat drukt deze code af?
d = {"b": 2, "a": 1} for k in d: print(k)a
bb
a2
1b 2
a 1
- Wat drukt deze code af?
scores = {"Ari": 3, "Bo": 6, "Cy": 3} print(max(scores, key=scores.get)) - Wat drukt deze code af?
d = {"x": 1, "y": 2} total = 0 for k, v in d.items(): total += v print(total)
- ‘votes["Dan"] geeft 0 als Dan geen stemmen kreeg.’ Als "Dan" nooit als sleutel is toegevoegd, stopt opzoeken met KeyError: 'Dan'. Gebruik votes.get("Dan", 0) als een sleutel kan ontbreken.
- ‘14 in ages test of iemand 14 is.’ in bekijkt sleutels, geen waarden. Schrijf 14 in ages.values() om waarden te doorzoeken.
- ‘Woordenboeken hebben posities zoals lijsten, dus votes[0] is de eerste kandidaat.’ Een woordenboek wordt op sleutel opgezocht, niet op positie. votes[0] zoekt een sleutel gelijk aan 0 en geeft KeyError: 0.
- Een woordenboek bewaart sleutel: waarde-paren in { }.
- d[key] leest een waarde; een ontbrekende sleutel geeft KeyError.
- d.get(key, default) vermijdt de KeyError.
- counts[x] = counts.get(x, 0) + 1 is het telpatroon.
- for k, v in d.items(): doorloopt paren in de volgorde waarin ze zijn toegevoegd.
Bronnen van deze cursus (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)
Geraadpleegd: 2026-10-19