Sliter du med for mange variabler, for mange lister, for mye av alt? Da finnes løsningen for deg: Dictionaries og Klasser!
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!
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"?
- ❓ Hva tror du skjer dersom du bytter fra
Oppdatere verdier 🪙
- ✅ Du kan oppdatere verdier inni en Dictionary ved å bruke
=. Her ser dere et eksempel derratingtil 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
fforan 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:
titleyeardirectorrating
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()

