Programmering nivå 2
Kap 2.4 – Dictionaries och tuples
Välj rätt datastruktur när värden behöver namn, ordning eller skydd mot ändring.
Mål med lektionen
När du har arbetat klart med denna lektion ska du:
- Förstå vad en dictionary och en tuple är.
- Kunna skapa och använda dictionaries för att lagra nyckel-värde-par.
- Förstå tuples som fasta, ordnade samlingar av data.
- Veta när du bör använda dessa strukturer i stället för listor.
Så här lär du dig bäst
Testa varje struktur med olika datatyper och i kombination med loopar och funktioner. Jämför hur det känns att använda listor, dictionaries och tuples i olika situationer. Reflektera över varför vissa datastrukturer är mer lämpliga än andra beroende på sammanhang.
Vad är en dictionary?
En dictionary i Python är en samling av nyckel-värde-par, där varje nyckel är unik. Den används när du vill koppla ett värde till ett specifikt namn eller en identitet.
person = {
"name": "Anna",
"age": 25,
"city": "Stockholm"
}
Åtkomst
print(person["name"]) # Anna
Om du försöker hämta en nyckel som inte finns får du KeyError. När du är osäker kan du
använda get() och ange ett standardvärde:
print(person.get("email", "Ingen e-post finns"))
Ändra eller lägga till
person["age"] = 26
person["email"] = "alice@example.com"
Ta bort
del person["city"]
Loopa genom en dictionary
for key, value in person.items():
print(f"{key}: {value}")
Realistiskt exempel: flera dictionaries i en lista
Ofta använder du dictionaries för objektliknande data och lägger flera sådana dictionaries i en lista.
books = [
{"title": "Python", "year": 2024},
{"title": "Webbutveckling", "year": 2023}
]
for book in books:
print(book["title"])
Interaktiv övning: dictionary steg för steg
Testa att hämta, ändra, lägga till, ta bort och loopa genom en dictionary. Kör ett val i taget och se hur innehållet förändras.
Prova till exempel att:
- hämta nyckeln
name - ändra
agetill26 - lägga till nyckeln
email - ta bort
city - loopa genom hela dictionaryn med
items()
Programmering 2-koppling: dictionaries passar när varje värde behöver en tydlig nyckel, till exempel persondata, inställningar eller poängtabeller.
Vad är en tuple?
En tuple är en ordnad, oföränderlig samling. Den används när du inte vill att värden ska kunna ändras.
Oföränderlig betyder att du inte kan byta ut, lägga till eller ta bort positioner i tuplen. Om en tuple innehåller ett ändringsbart objekt, till exempel en lista, kan själva listan fortfarande ändras. Det viktiga här är att tuple-strukturen är fast.
coordinates = (10, 20)
print(coordinates[0]) # 10
Tuple-uppackning
Tuple-uppackning betyder att du tar värdena från en tuple och lägger dem i separata variabler på en gång. Antalet variabler måste matcha antalet värden i tuplen.
coordinates = (10, 20)
x, y = coordinates
print(x) # 10
print(y) # 20
Det här är samma idé som när en funktion returnerar flera värden:
def get_user():
return ("Anna", 25)
name, age = get_user()
print(name) # Anna
print(age) # 25
Interaktiv övning: tuple
Testa att läsa värden från en tuple och jämför med vad som händer om du försöker ändra den. Tuples är ordnade, men oföränderliga.
Prova till exempel att:
- läsa index
0och få första värdet - läsa index
1och få andra värdet - packa upp tuplen med
x, y = coordinates - försöka ändra index
0och se felmeddelandet
Programmering 2-koppling: tuples passar när värden hör ihop och inte ska ändras, till exempel koordinater eller fasta inställningar.
Tuples används ofta för att returnera flera värden från en funktion. Då kan mottagaren packa upp värdena direkt i tydliga variabler:
def get_user():
return ("Anna", 25)
name, age = get_user()
print(name)
print(age)
Skillnad mot listor
- Listor: ändringsbara, alltså mutable.
- Tuples: fasta, alltså immutable.
Använd en tuple när värdena hör ihop och inte ska bytas ut, till exempel en koordinat
(x, y). Använd en dictionary när varje värde behöver ett tydligt namn, till exempel
{"name": "Anna", "age": 25}.
Jämförelse: när används vad?
| Struktur | Egenskaper | Använd när du vill... |
|---|---|---|
| List | Ordnad, ändringsbar | Lagra flera värden i en ordning |
| Dictionary | Nyckel-värde-par | Knyta namn eller etikett till varje värde |
| Tuple | Ordnad, oföränderlig | Lagra en fast uppsättning värden |
Öva själv
Övning 1: Skapa en bok-dictionary
Skapa en dictionary för en bok med nycklarna title, author och
year. Skriv ut varje värde genom att använda rätt nyckel.
Kontrollera programmet
- Titeln, författaren och året ska skrivas ut.
- Ändra bokens titel och kontrollera att utskriften ändras.
- Använd
get()för att försöka hämta nyckelnisbnmed ett eget standardmeddelande.
Fundera: Vad är skillnaden mellan en nyckel och dess värde?
När du har försökt själv: visa lösningsförslaget till övning 1 på GitHub.
Övning 2: Ändra personuppgifter
Skapa en dictionary med namn, ålder och stad. Ändra åldern, lägg till en e-postadress och ta
bort staden med del. Skriv ut dictionaryn före och efter ändringarna.
Kontrollera programmet
- Åldern ska ha fått ett nytt värde.
- En ny nyckel för e-post ska finnas.
- Nyckeln för stad ska vara borttagen.
Fundera: Hur avgör Python om en tilldelning ändrar ett värde eller lägger till ett nytt nyckel-värde-par?
När du har försökt själv: visa lösningsförslaget till övning 2 på GitHub.
Övning 3: Skriv ut alla nycklar och värden
Skriv funktionen print_dictionary(dictionary). Funktionen ska ta emot en
dictionary och använda items() för att skriva ut varje nyckel tillsammans med
dess värde.
Testa funktionen med
- en dictionary för en person.
- en dictionary med användarnamn och poäng.
- en tom dictionary.
Fundera: Vad innehåller variablerna
key och value under varje varv i loopen?
När du har försökt själv: visa lösningsförslaget till övning 3 på GitHub.
Övning 4: Returnera och packa upp en tuple
Skriv funktionen get_user() som returnerar en tuple med ett namn och en ålder.
Anropa funktionen, packa upp tuplen i två variabler och skriv ut värdena separat.
Kontrollera programmet
- Funktionen ska returnera exakt två värden i en tuple.
- Antalet variabler vid uppackningen ska vara två.
- Skriv också ut värdet på index
0direkt från tuplen.
Fundera: Vad händer om antalet variabler inte matchar antalet värden i tuplen?
När du har försökt själv: visa lösningsförslaget till övning 4 på GitHub.
Övning 5: Sök i en lista med böcker
Svårare övning: Här kombinerar du en lista med dictionaries, funktioner och linjär sökning.
Skapa en lista som innehåller minst tre bok-dictionaries. Varje bok ska ha nycklarna
title, author och year. Skriv funktionen
find_book(books, target_title) som går igenom listan och returnerar den dictionary
vars titel matchar sökningen. Om ingen bok hittas ska funktionen returnera en tom dictionary.
Skriv ut den hittade bokens uppgifter med items().
Testa funktionen med
- titeln på den första boken.
- titeln på den sista boken.
- en titel som inte finns.
Fundera: Varför returnerar funktionen hela bokens dictionary och inte bara titeln?
När du har försökt själv: visa lösningsförslaget till övning 5 på GitHub.
Övning 6: Poängregister med dictionary
Svårare övning: Här kombinerar du en dictionary med funktioner, meny, loopar och säker inmatning.
Skapa ett menyprogram med alternativen 1. Lägg till eller ändra poäng,
2. Visa alla poäng, 3. Sök efter användare och
4. Avsluta. Användarnamn ska vara nycklar och heltalspoäng ska vara värden.
Felaktig poänginmatning ska hanteras med try och except ValueError.
Använd items() vid utskrift och get() vid sökning.
Testa programmet genom att
- visa registret när det är tomt.
- lägga till minst tre användare.
- ändra poängen för en användare som redan finns.
- söka efter en användare som finns och en som saknas.
- skriva text i stället för poäng och därefter avsluta.
Fundera: Varför ersätts det tidigare värdet när samma användarnamn används igen?
När du har försökt själv: visa lösningsförslaget till övning 6 på GitHub.
Reflektion
- När känns det bäst att använda en dictionary istället för en lista?
- Hur påverkar det programlogiken att en tuple inte kan ändras?
- Vilken struktur tycker du är mest användbar i ett menybaserat program?