Ordbøker#

Ordbøker (dictionaries) er samlinger av objekter, som lister, tupler og mengder.

I Lister lagrer vi data i en rekkefølge. I ordbøker lagrer vi data i par med keys og values. En nøkkel er forbundet med sin verdi.

land = {"NO" : "Norge", "SE" : "Sverige"}
 
print(land["NO"])
print(land["SE"])
Norge
Sverige

I koden over lager vi landkoder. "NO" og "SE" er keys, og "Norge" og "Sverige" er de tilhørende verdiene. Vi knytter sammen keys og verdiene med kolon :. For å hente verdier fra ordboken land så skriver vi inn en key med land["NO"] og så får vi ut verdien "Norge".

Dersom vi skal sette sammen en enkel ordbok så er det vanlig å gjøre det over flere linjer. Det er litt mer oversiktlig enn eksemplet over.

land = {
    "NO" : "Norge",
    "SE" : "Sverige"
}

Legge til, endre og fjerne data#

For å legge til data så setter vi en ny nøkkel lik en verdi.

land = {}                # Tom ordbok

land["NO"] = "Norge"     # Verdien "Norge" legges inn i ordboken under nøkkelen "NO"
land["DK"] = "Danmark"   # Verdien "Danmark" legges inn i ordboken under nøkkelen "DK"

print(land)
{'NO': 'Norge', 'DK': 'Danmark'}

For å endre på data kan vi sette en eksisterende nøkkel til en ny verdi.

land = {
    "NO" : "Norge",
    "DK" : "Danmark"
} 

print(land)

land["DK"] = "Donkey Kong" # Nøkkelen "DK" får en ny verdi "Donkey Kong" 🐒

print(land)
{'NO': 'Norge', 'DK': 'Danmark'}
{'NO': 'Norge', 'DK': 'Donkey Kong'}

Vi kan fjerne data ved å bruke pop()-metoden.

land = {
    "NO" : "Norge",
    "SE" : "Sverige",
    "DK" : "Danmark"
}

land.pop("NO") # Fjerner både nøkkel og verdi for nøkkelen "NO"

print(land)
{'SE': 'Sverige', 'DK': 'Danmark'}

Løkker og ordbøker#

Vi kan gå igjennom ordbøker med for-løkker på denne måten.

land = {
    "NO" : "Norge",
    "SE" : "Sverige"
}

for x in land:
    print("Nøkkel:", x)        # Skriver ut nøkkelen
    print("Verdi:", land[x])   # Skriver ut verdien til nøkkelen
Nøkkel: NO
Verdi: Norge
Nøkkel: SE
Verdi: Sverige

Counter#

En Counter er en spesiell ordbok som fungerer ekstremt godt til å telle opp ting.

from collections import Counter

tekst = "😎😋😎😆😉😉😉😉😉😋😆😘😅😘😆😉😋😉😋😅😍😉😋😎😍😆😋😆😉"

# Lager en counter
tekst_counter = Counter()

# Går gjennom hver emoji
for emoji in tekst:
    tekst_counter[emoji] += 1

# Skriver ut alle counts
print(tekst_counter)

# Skriver ut liste over topp 3
print(tekst_counter.most_common(3))
Counter({'😉': 9, '😋': 6, '😆': 5, '😎': 3, '😘': 2, '😅': 2, '😍': 2})
[('😉', 9), ('😋', 6), ('😆', 5)]

Dette hadde ikke funket på en vanlig ordbok

Hvis vi hadde tatt tekst_counter[emoji] += 1 på en vanlig ordbok, hadde vi fått en KeyError.

Det finnes måter rundt dette, men å bruke en Counter er det enkleste.


Oppgaver#

Oppgave 1 🎒

Lag en ordbok elev som skal ha fag som nøkler og karakterer som verdier. Den kan starte slik

elev = {
    "Norsk" : 4,
    "Gym" : 3
}
  1. Legg til fire nye fag og karakterer. Du kan bestemme både fag og karakterer.

  2. Lag en løkke som skriver ut alle fagene og karakterene med en setning Eleven har <karakter> i faget <fag>.

  3. Finn og skriv ut karaktersnittet til eleven.

Oppgave 2 🔤

Vi finner en ordsum ved å gi hver bokstav en tallverdi basert på plasseringen i alfabetet.

  • For eksempel er ordsummen av ordet BOB lik \(2 + 15 + 2 = 19\)

Du kan få bruk for ordboken under for å løse oppgaven.

bokstav_verdi = {"A":1,"B":2,"C":3,"D":4,"E":5,"F":6,"G":7,"H":8,"I":9,"J":10,"K":11,"L":12,"M":13,"N":14,"O":15,"P":16,"Q":17,"R":18,"S":19,"T":20,"U":21,"V":22,"W":23,"X":24,"Y":25,"Z":26,"Æ":27,"Ø":28,"Å":29}

Hva er ordsummen av ordet PREIMPLANTASJONSDIAGNOSTIKKNEMNDA?

Svar:

Oppgave 3 🌹

Dette er en fortsettelse av denne oppgaven om mengder

Shakespeares fortelling om den forbudte forelskelsen mellom Romeo Montague og Juliet Capulet er en rivende kjærlighetshistorie med mange dramatiske vendinger.

Last ned filen romeo_and_juliet.txt

Skriv ut de ti mest brukte ordene i hele tekstfilen og hvor mange ganger de har blitt brukt.

  • Små og store bokstaver teller ikke som forskjellige ord.

    • "Word" telles som det samme ordet som "word"

  • Tegnene ",", ")", "(", ".", ";", ":", "_", "]", "[", "?", "!" skal ignoreres.

    • "Word!" telles som det samme ordet som "Word" og "Word.".

Tekst tatt fra Project Gutenberg (lenke).

Hint

Denne listen kan være til hjelp med å rense ordene.

tegn = [",", ")", "(", ".", ";", ":", "_", "]", "[", "?", "!"]