Logga in för att kunna spara vad du har gjort.
<< Föregående
Hem
Nästa >>
VARNING! Fönstret är för smalt för att använda pythonlabbet.se fullt ut. Använd en enhet med tangentbord!

Lexikon eller "dictionary"

I det här avsnittet kommer du att lära dig att

Vad är ett lexikon?

Ett lexikon (engelska: dictionary) består av nycklar och värden. Till varje nyckel finns ett värde. En nyckel måste vara unik medan ett värde kan finnas flera gånger i samma lexikon. Nycklar används för att komma åt värdet som associeras med den nyckeln.

Genom att Python använder något som kallas hashing går det snabbt att ta fram ett värde när vi har nyckeln. Det behövs ingen sökning. I princip gäller att även om ett lexikon är väldigt stort så tar det inte längre tid att hitta ett värde. Det är den stora fördelen med lexikon.

Vanliga typer för nycklar är tal och strängar men det fungerar också att ha exempelvis tupler som nycklar. Det går att ha alla sorts objeket som är oföränderliga (engelska: immutable). Listor fungerar alltså inte som nycklar. Som värde går det däremot bra med listor eller vilken annan typ som helst.

Skapa ett lexikon

Det går att skapa ett lexikon på en rad med syntaxen

lexikon = {nyckel_1: värde_1, nyckel_2: värde_2, ...}

För att sedan läsa till exempel värde_1 kan vi skriva lexikon[nyckel_1].

Exempel

Ett lexikon med priserna för olika frukter. För tydlighet skrivs varje element på en egen rad. Observera att två olika frukter kan ha samma pris.

priser = {
    'äpplen': 29, 
    'bananer': 24, 
    'apelsiner': 19, 
    'vindruvor': 29
}
pris_bananer = priser['bananer']
  

Det går också att först skapa ett tomt lexikon med dict() eller {} och sedan lägga till nyckel-värde-par en och en.

Exempel

Lägg till element i ett från början tomt lexikon. Nycklarna är universitetsstäder och värden är antal studenter.

studenter = dict()
studenter['Lund'] = 32036
studenter['Uppsala'] = 35556
studenter['Stockholm'] = 37484
  

Om vi skriver ett värde till en nyckel som redan finns i vårt lexikon så skrivs värdet över. För att se hur många nyckel-värde-par det finns i ett lexikon kan len() användas.

Exempel

Vi ser att antal element i ett lexikon förbli samma om vi skriver till en nyckel som redan finns.

favoritmat = {
    'Emil': 'Sushi',
    'Leo': 'Hamburgare',
    'Tanja': 'Pizza'
}
element_1 = len(favoritmat) # 3 element

#ändrar värdet för en existerande nyckel
favoritmat['Tanja'] = 'Corn Flakes'
element_2 = len(favoritmat) # 3 element

#lägger till ett nytt nyckel-värde-par
favoritmat['Christine'] = 'Popcorn'
element_3 = len(favoritmat) # 4 element

Logga in eller skapa konto för att spara dina framsteg och din kod.

Vad gör koden?

Läs koden nedan och försök lista ut vad programmet skriver ut. Kör programmet efter du svarat och se om du fick rätt.

-- Programmets utskrifter --

Fråga: Vad kommer programmet ovan att skriva ut?

2
12
12.5
15

Använda lexikon

Som vi såg tidigare kan ett värde läsas genom att skriva lexikon[nyckel]. Om inte nyckeln finns i lexikonet blir det fel i programmet.

Exempel med fel

Testa koden för att se vilket fel det blir när en nyckel som inte finns används.

lexikon = dict()
print(lexikon['nyckel_som_inte_finns'])
  

Vi kan se om nyckeln existerar med if nyckel in lexikon:. Det går generellt mycket snabbt att se om en nyckel finns eller inte, och det tar samma korta tid även om lexikonet är väldigt stort. Det kan jämföras med att istället ha en lista med nycklar, då tar det mycket längre tid att se om nyckeln finns i en stor lista jämfört med en liten lista. (Överkurs: I en dubbelt så stor lista så tar det dubbelt så lång tid att söka efter ett värde. I ett lexikon är tiden oberoende av storleken.)

Exempel

Om nyckeln finns i listan skriver vi ut värdet, annars informerar vi om att nyckeln inte finns.

milj_invånare = {
    'Sverige':10.4,
    'Danmark':5.8,
    'Norge':5.4,
    'Finland':5.5
}
nyckel = input('Skriv land.')

if nyckel in milj_invånare:
    print(nyckel, milj_invånare[nyckel])
else:
    print(nyckel, 'finns inte i registret.')
  

Det är enkelt att ta bort element ur ett lexikon. Det görs med lexikon.pop(nyckel).

Exempel

Ta bort ett nyckel-värde-par ur ett lexikon.

användare = {
    'id': 2814,
    'namn': 'Darth Vader',
    'personlighet': 'ond'
  }

användare.pop('personlighet')
  

Logga in eller skapa konto för att spara dina framsteg och din kod.

Ändra i koden

Det har smugit in sig ett par fel i persondata. Följande saker måste ändras:

  • Lägg till ett år på åldern.
  • Ändra status på barn till True.
  • Lägg till Engelska sist i listan på språk.
  • Dessutom gillar Emil inte horoskop så ta bort nyckeln stjärntecken från lexikonet.

Programmet ska inte skriva ut mer än vad som redan skrivs ut på rad 10.

-- Programmets utskrifter --

Iterera över ett lexikon

Ett lexikon kan itereras över genom att dels iterera över alla nycklar och dels genom att iterera över alla värden.

För att iterera över att alla nycklar skriver vi for nyckel in lexikon:, där nyckel är en variabel som i tur och ordning innehåller nyckel för nyckel genom loopen.

Exempel

Iterera över nycklarna i ett lexikon.

grand_slams = {
    'Court': 24,
    'Williams': 23,
    'Graf': 22,
    'Federer': 20,
    'Nadal': 20,
    'Djokovic': 20
  }

for spelare in grand_slams:
    print(spelare, 'har', grand_slams[spelare], 'Grand Slam segrar.')
  

För att iterera över värdena i ett lexikon kan vi använda funktionen lexikon.values() som returnerar en lista av alla värden.

Exempel

Iterera över värdena i ett lexikon.

grand_slams = {
    'Court': 24,
    'Williams': 23,
    'Graf': 22,
    'Federer': 20,
    'Nadal': 20,
    'Djokovic': 20
  }

for segrar in grand_slams.values():
    print('Antal segrar', segrar)

Logga in eller skapa konto för att spara dina framsteg och din kod.

Skapa

Myran Myra bor i koordinaten (0,0). Ibland vandrar hon till en annan koordinat och sedan hem igen. Hon reser alltid parallellt med x- och y-axeln. Hon har samlat vilka koordinater hon har besökt och hur många gånger hon besökt dem i ett lexikon.

Nu vill Myra veta vilken koordinat som hon har spenderat mest tid att gå fram och tillbaka till. Hon vandrar alltid lika fort.

Skriv ut rätt koordinat på formen (x, y).

-- Programmets utskrifter --
Status
Du har inte gjort klart någon uppgift än (0 st).