0%

De standaardbibliotheek bestaat al · oefening

Tellen met Counter

De tweede taak van het overzicht is activiteitencategorieën tellen. Je zou een dictionary kunnen bouwen en per categorie kunnen controleren of die al eerder is verschenen. Die code is mogelijk, maar de taak komt zo vaak voor dat de standaardbibliotheek er een naam voor heeft: Counter.

De constructor collections.Counter accepteert een iterable van hashbare waarden. Hij geeft een subklasse van dictionary terug waarvan de waarden aantallen zijn:

Try it

De ontbrekende categorie drukt 0 af. Een gewone dictionary-lookup zou KeyError opwerpen. Dat verschil hoort bij het publieke contract van Counter en is een reden waarom die bij deze taak past.

Scheid tellen van presenteren

Onze records zijn dictionaries:

{"date": "2026-08-03", "category": "walk", "minutes": 35}

Counter heeft de categoriewaarden nodig, niet de volledige dictionaries. Bouw een lijst met die waarden en geef die lijst vervolgens aan Counter.

Maak er nog geen zin van. Een Counter is bruikbare data die de eindopdracht later kan ordenen en presenteren. Counter onthoudt de volgorde waarin waarden verschijnen, maar die volgorde is geen afspraak over een alfabetisch rapport. Door die keuzes te scheiden wordt de uiteindelijke uitvoer deterministisch.

Wat moet count_categories(records) aan Counter meegeven?

Voeg de tweede functie toe aan hetzelfde werkruimtebestand. De editor voegt de nieuwe startdefinitie samen met je werk zonder de al voltooide days_between te vervangen.

Opdracht

Implementeer count_categories(records) in activity_report.py.

Elk record is een dictionary met de sleutels date, category en minutes.

  1. Doorloop alle records en verzamel hun category-waarde.

  2. Maak van die categorieën een collections.Counter en geef die terug.

  3. Laat een lege lijst vanzelf een lege Counter opleveren.

Blijf gegevens teruggeven in plaats van een opgemaakte zin. De eindopdracht bepaalt hoe de aantallen worden getoond.