Gruppering med én variabel per kategori

Handler om: Aggregering

Når du skal telle hvor mange i hver kategori (f.eks. hvor mange elever per karakter), lager du en egen variabel for hver verdi: antall_5 = 0, antall_4 = 0 … Det virker for tre-fire kategorier, men faller sammen så snart kategoriene er mange eller ukjente på forhånd. Riktig verktøy er én ordbok som teller per nøkkel.

Eksempel

Du skal telle elever per karakter. Med separate variabler må du skrive en if-gren for hver mulige karakter — og hvis det dukker opp en karakter du ikke forutså, blir den ikke talt.

Slik tenker du riktig om det

Knytt tilbake til ordbok-konseptet: en ordbok som teller er «én bøtte per kategori, laget automatisk». teller.get(k, 0) + 1 betyr «hent telleren for k, eller start på 0, og legg til én». Da finner koden selv kategoriene mens den går.

Slik ser det ut i kode

Slik gikk det galt

antall_5 = 0
antall_4 = 0
antall_3 = 0
for elev in data:
    if elev["karakter"] == "5":
        antall_5 = antall_5 + 1
    elif elev["karakter"] == "4":
        antall_4 = antall_4 + 1
    elif elev["karakter"] == "3":
        antall_3 = antall_3 + 1
# 6-ere blir aldri talt!

Slik fikser du det

teller = {}
for elev in data:
    k = elev["karakter"]
    teller[k] = teller.get(k, 0) + 1
# teller blir f.eks. {"5": 1, "4": 1, "6": 1, "3": 1}

Les om dette i boka

↓↑ naviger Enter åpne ShiftEnter ny fane Esc lukk
Velg tema
Skala