Dictionaries - Intro

Skip to content

Sliter du med for mange variabler, for mange lister, for mye av alt? Da finnes løsningen for deg: Dictionaries og Klasser!

Dictionaries?

Perry the Dictionary


Dictionaries - Lister med navn 📖

Et “dictionary” (Norsk: ordbok 📖) er en datastruktur, som lar deg holde styr på flere verdier, på mange måter likt som en liste, men i motsetning til lister kan du gi hvert element et “navn”.

  • ✅ Dette er nyttig fordi det gjør at vi kan samle data som skal henge sammen på samme sted!
  • ✅ Det blir ferre variabler å holde styr på.

Her kan du se et eksempel på et dictionary for en bruker:

user = {
    "username": "TheCoder27",
    "age": 17,
    "premium": False,
    "progress": 0.75
}

Hva skjer her?

Dictionaries forventer følgende struktur:

variable_name = {
    "key_name": key_value,
    "key_name2": key_value,
    # også videre nedover
}

variable_name er bare en variabel, så de vanlige reglene for variabler følger her.

Deretter bruker vi klammeparenteser {} for å fortelle Python at dette skal være et dictionary.

Etterpå listes det som er kjent som “key-value”-pairs. Altså, en nøkkel 🗝️ og en verdi 🪙. Alt dette betyr er at en verdi får et navn, og denne verdien skal bare være tekst, altså en string.

Hvis du ser på bruker-eksemplet over kan du se ganske klart hva dette betyr. For eksempel: "username" i brukeren er "TheCoder27". Da er nøkkelen 🗝️ "username", og verdien 🪙 "TheCoder27".


Verdier

Verdier 🪙 i et dictionary kan være hvilken som helst datatype. Husk tilbake til hvilke datatyper vi har.

Datatype Skrivemåte
string "TheCoder27"
integer 17
boolean False
float 4.5

Du kan da gjette rett at Lister og Dictionares er også datatyper: list og dict, så disse kan også plasseres inni en Dictionary. Alle typer fungerer!

dictionarydictionarydictionarydictionary

Dictionaryception


Hente ut verdier 🤔

  • ✅ Hvis vi vil skrive ut kun en av verdiene fra dette dictionariet, kan du bruke hakeparenteser, som med lister:
print(user["username"])
  • ✅ Denne koden vil printe ut TheCoder27.
    • ❓ Hva tror du skjer dersom du bytter fra "username" til "age"?

Oppdatere verdier 🪙

  • ✅ Du kan oppdatere verdier inni en Dictionary ved å bruke =. Her ser dere et eksempel der rating til brukeren blir oppdatert:
user["progress"] = 4.7

Legge til verdier ➕

  • ✅ For å legge til en ny verdi i et dictionary er det bare å skrive på samme måte som å legge til, men med en key som ikke eksisterer ennå. Her ser dere et eksempel:
user["logged_in"] = True

String Format

Noe du ikke har sett ennå er noe som heter “string format”. Det er egentlig bare en måte å skrive kode i en print().

Her er et eksempel på hvordan dette kan se ut med dictionary-eksempelet fra tidligere (bruker):

print(f"Brukeren {user['username']} er {user['age']} år gammel.")

Merk!

  • Her brukes f foran starten på teksten (string).
  • Inni finnes klammeparenteser {}.
  • Siden vi starter string-en med " kan vi ikke bruke " for å hente ut fra dictionariet, siden da ville teksten bli avsluttet! Derfor brukes enkle ' for å hente ut.

Oppgaver

I denne oppgavedelen skal du lage en enkel “film-database”. 🎥🎞️

Oppgave 1a - Lag et dictionary

Opprett en ny Python fil som heter movies.py.

Lag en variabel kalt movie og legg inn følgende nøkler:

  • title
  • year
  • director
  • rating

Velg hva verdiene her skal være selv.

Deretter, skriv ut denne med en print().

⚠️ Husk å gi disse verdiene rett datatype, referer til tabellen over hvis du er usikker på hvordan dette kan skrives.

Eksempel-Løsning
movie = {
    "title": "Inception",
    "year": 2010,
    "director": "Christopher Nolan",
    "rating": 8.8
}

print(movie)

Oppgave 1b - Endring?

Endre på en av verdiene og print ut. Hva skjer?

Oppgave 2 - Bruk et dictionary

Bruk movie-dictionariet du nettopp lagde til å hente ut:

  • Tittelen til filmen
  • Hvilket år filmen kom ut
Eksempel-Løsning
print(movie["title"])
print(movie["year"])

Oppgave 3a - Skriv ut en setning

Bruk en “string format” til å skrive ut en setning om filmen. For eksempel som:

Filmen Inception kom ut i 2010.

Eksempel-løsning
print(f"Filmen {movie['title']} kom ut i {movie['year']}.")

Oppgave 3b - Anotha one 🤑

Bruk string format til å skrive ut en setning som denne fra dictionariet:

Filmen ble regissert av Christopher Nolan og fikk 8.8 i rating.

Oppgave 3c - Funksjoner

Lag koden du gjorde i 1.3a og 1.3b om til en funksjon som skriver ut denne informasjonen.

  • ✅ Funksjonen skal ta inn et argument som er dictionariet.

Start-kode:

def print_movie(the_movie):
    # her skriver du koden din
Eksempel-løsning
def print_movie(the_movie):
    print(f"Filmen {the_movie['title']} kom ut i {the_movie['year']}.")
    print(f"Filmen ble regissert av {the_movie['director']} og fikk {the_movie['rating']} i rating.")

print_movie(movie)

Oppgave 4 - Oppdater på rating

La oss late som at filmen vår har gått opp i rating. Oppdater ratingen slik at den blir en ny verdi. Deretter skriv den ut på nytt.

Eksempel-løsning
movie["rating"] = 8.9

print(movie["rating"])

Oppgave 5a - Har filmen blitt sett? 🤔

Legg til en ny nøkkel-verdi (ved hjelp av kode) som holder informasjon om filmen har blitt sett eller ikke. Deretter skriv ut all informasjonen om filmen.

Eksempel-løsning
movie["watched"] = True

print(movie)

Oppgave 5b

Oppdater funksjonen du lagde i 1.3c til å skrive ut "✅ Du har sett denne filmen." hvis verdien til "watched" er True. Hvis du vil kan du også skrive ut en melding dersom du ikke har sett filmen.

Eksempel-løsning
def print_movie(the_movie):
    print(f"Filmen {the_movie['title']} kom ut i {the_movie['year']}.")
    print(f"Filmen ble regissert av {the_movie['director']} og fikk {the_movie['rating']} i rating.")

    if the_movie["watched"] == True:
        print("✅ Du har sett denne filmen.")

print_movie(movie)

True == True

Du kan også bare skrive if movie["watched"]:, dette er fordi True er det if egentlig ser etter. Det som på en måte skrives her er True == True vil svare med verdien True, vi trenger bare å skrive if True: for at noe skal stemme.

Oppgave 6 - Flere filmer

Legg til to filmer til i koden din. For øyeblikket kan dere bare kalle disse med variabler som movie2 og movie3. Husk å ha med verdien for watched også. Deretter print ut begge disse ved hjelp av funksjonen din.

Oppgave 7 - Final challenge: Liste med dictionaries

Endre på koden din til å bruke en liste med dictionaries kalt movies. Deretter bruk tall (index) til å hente ut hver film. Her kan du ta i bruk en for-loop for å gå igjennom alle.

Eksempel-løsning
movies =
[
    {
        "title": "Inception",
        "year": 2010,
        "director": "Christopher Nolan",
        "rating": 8.8,
        "watched": True
    },
    {
        "title": "Fight Club",
        "year": 1999,
        "director": "David Fincher",
        "rating": 8.8,
        "watched": False
    },
    {
        "title": "GoodFellas",
        "year": 1990,
        "director": "Martin Scorsese",
        "rating": 8.7,
        "watched": False
    }
]

for movie in movies:
    print_movie(movie)
    print()