2.9. Dictionaries¶
Een dictionary is een afbeelding van sleutels naar waarden. Elke sleutel wordt direct opgezocht; de dictionary onthoudt welke waarde het laatst aan die sleutel was gekoppeld.
2.9.1. Dictionaries maken¶
Gebruik accolades met key: value-paren, of de dict-constructor:
empty = {}
person = {"name": "OpenMV", "id": 42}
counts = dict(a=1, b=2, c=3) # keyword form
pairs = dict([("x", 1), ("y", 2)]) # from a list of pairs
Waarden kunnen van elk type zijn – strings, getallen, lijsten, zelfs andere dicts:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Elke sleutel in een dictionary verwijst naar precies één waarde.¶
2.9.2. Toegang en lidmaatschap¶
Indexeren met [] haalt de waarde voor een sleutel op. Een ontbrekende sleutel veroorzaakt een KeyError:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Voor een vergevingsgezinde opzoeking gebruik je dict.get(). Dit retourneert None voor een ontbrekende sleutel, of een waarde die je als tweede argument meegeeft:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
Het sleutelwoord in test op lidmaatschap van een sleutel – niet van een waarde:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Toevoegen, bijwerken en verwijderen¶
Toewijzen aan d[key] voegt het item toe als de sleutel nieuw is en overschrijft het als de sleutel al bestaat:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
Verwijderen kent een paar vormen:
del d[key]– verwijdert een item; veroorzaakt eenKeyErrorals de sleutel ontbreekt.dict.pop()– verwijdert de waarde en retourneert deze; met een optionele standaardwaarde kun je de uitzondering vermijden.dict.clear()– verwijdert elk item.
dict.update() voegt een andere dictionary (of een lijst van (key, value)-paren) samen in de ontvanger, waarbij overeenkomende sleutels worden overschreven:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Itereren¶
Direct over een dictionary itereren levert de sleutels op, in invoegvolgorde:
for k in person:
print(k)
Drie views geven expliciete toegang:
dict.keys()– de sleutels (hetzelfde als itereren over de dict).dict.values()– de waarden.dict.items()–(key, value)-tuples, perfect om in een lus uit te pakken.
for key, value in person.items():
print(key, "=", value)
2.9.5. Wat als sleutel kan dienen¶
Dictionary-sleutels moeten hashbaar zijn – hun waarde mag niet veranderen gedurende hun levensduur. Veelvoorkomende hashbare typen zijn:
Veranderlijke typen zoals list, dict en bytearray kunnen geen sleutels zijn; er een gebruiken veroorzaakt een TypeError. Tuples van onveranderlijke waarden zijn de standaardmanier om een dictionary te indexeren op een samengestelde identifier, zoals een 2D-rastercoördinaat:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Lengte¶
len() retourneert het aantal items:
>>> len(person)
4