0%

Dictionaries en andere verzamelingen · oefening

Bewaar meerdere records in een lijst

Eén dictionary modelleert één record:

book = {
    "title": "Kindred",
    "category": "novel",
    "year": 1979,
}

Een lijst kan veel records in volgorde bewaren:

catalog = [
    {
        "title": "Kindred",
        "category": "novel",
        "year": 1979,
    },
    {
        "title": "City map",
        "category": "reference",
        "year": 2026,
    },
]

Lees de structuur van buiten naar binnen:

  1. catalog is een lijst.

  2. Elk lijstitem is een dictionary.

  3. Elke dictionary gebruikt dezelfde sleutels om één item te beschrijven.

Houd de vorm consistent

Een lijst met records is het makkelijkst te gebruiken wanneer elk record dezelfde verplichte sleutels heeft.

for item in catalog:
    print(f"{item['title']} ({item['year']})")

De lus kan erop vertrouwen dat elk item de sleutels "title" en "year" heeft.

Als één record "name" gebruikt terwijl de andere "title" gebruiken, heeft het programma uitzonderingsgevallen nodig of loopt het vast met een KeyError. Consistente gegevens maken de code eenvoudiger.

Voeg nog een record toe

Gebruik de lijstmethode die je al kent:

catalog.append(
    {
        "title": "Trail guide",
        "category": "reference",
        "year": 2024,
    }
)

De lijst krijgt er één item bij. De dictionaries die er al in stonden, blijven ongewijzigd.

Bereik één veld

Je kunt een lijstindex en een dictionarysleutel combineren:

print(catalog[0]["title"])

Werk van links naar rechts:

  1. catalog[0] geeft de eerste dictionary terug.

  2. ["title"] geeft de titelwaarde uit die dictionary terug.

Deze keten is handig wanneer de positie bekend is. Een lus is beter wanneer je elk record nodig hebt.

Bekijk nu de volledige structuur hieronder. Volg het opzoeken vanuit de buitenste lijst, via index 0 en daarna via de sleutel "title". Elk label in de figuur benoemt nu een bewerking die je kent. “Catalog: list” duidt de cataloguslijst aan; “Index 0” en “Index 1” zijn de eerste en tweede positie. De velden title, category en year staan voor titel, categorie en jaar.

Een cataloguslijst bevat twee dictionaries met dezelfde vorm; index nul kiest het eerste record en de sleutel title kiest de waarde Kindred.

Wat drukt dit programma af?

places = [
    {"name": "Kyoto", "country": "Japan"},
    {"name": "Lima", "country": "Peru"},
]

print(places[1]["country"])

Opdracht

Voeg een derde dictionary toe aan de lijst catalog:

SleutelWaarde
"title""Dune"
"category""novel"
"year"1965

Doorloop daarna elk record en druk dit af:

Kindred (novel)
A Wizard of Earthsea (novel)
Dune (novel)
Records: 3

Gebruik voor elk record dezelfde vorm met drie sleutels.