10 användbara Python Dictionary-metoder

By rik

Utforska Python-ordböcker: En Praktisk Guide

Är du intresserad av att lära dig mer om hur man hanterar Python-ordböcker? Den här guiden kommer att visa dig olika Python-metoder för att läsa, ändra och utföra andra vanliga operationer på dessa kraftfulla datastrukturer.

Vi börjar med att gå igenom grunderna i vad en Python-ordbok är, sedan skapar vi en enkel ordbok och anpassar den med hjälp av olika Python-metoder.

Låt oss dyka in!

Grunderna i Python-ordböcker

Ordböcker är en inbyggd datatyp i Python som tillåter lagring av information i form av nyckel-värdepar. De etablerar alltså en koppling, eller ”mappning”, mellan unika nycklar och deras motsvarande värden.

Nycklarna i en ordbok måste vara unika och hashbara. Dessa nycklar används för att snabbt söka upp tillhörande värden, eller för att utföra operationer via de inbyggda metoderna som vi snart ska utforska.

När man skapar en Python-ordbok kan man antingen direkt definiera nyckel-värdeparen eller först skapa en tom ordbok och sedan successivt addera dem.

>>> dict1 = {'språk':'Python','gillar':True}
>>> type(dict1)
<class 'dict'>

# eller så kan vi göra så här:

>>> dict1 = {}
>>> dict1['språk']='Python'
>>> dict1['gillar']=True

Metoder för vanliga operationer på Python-ordböcker

Viktigt: För att kunna följa exemplen nedan behöver du ha Python 3.7 eller senare version installerad.

Du kan skriva in koden i en Python REPL (interaktiv miljö) eller använda en online-Python-redigerare, som den som finns på adminvista.com.

>>> person = {'namn':'Alice',
...           'stad':'Portland',
...           'intresse':'Programmering',
...           'yrke':'Utvecklare'
...           }

Nu när vi har skapat en grundläggande Python-ordbok, ska vi undersöka de olika metoder som finns för att interagera med den.

Hämta nycklarna med keys()

En av de vanligaste uppgifterna är att hämta nycklar, värden eller nyckel-värdepar. För att få tag på alla nycklar i en ordbok, används metoden keys(), som demonstreras här:

>>> person.keys()
dict_keys(['namn', 'stad', 'intresse', 'yrke'])

Hämta värdena med values()

Metoden values() returnerar en lista med alla värden i ordboken, vilket kan vara användbart för vidare bearbetning.

Låt oss hämta alla värden från vår person-ordbok:

>>> person.values()
dict_values(['Alice', 'Portland', 'Programmering', 'Utvecklare'])

Hämta nyckel-värdepar med items()

Metoden items() returnerar alla nyckel-värdepar som en lista av tupler. När vi anropar den på vår person-ordbok, får vi alltså en lista av nyckel-värde-tupler:

>>> person.items()
dict_items([('namn', 'Alice'), ('stad', 'Portland'), ('intresse', 'Programmering'), 
           ('yrke', 'Utvecklare')])

Skapa en ytlig kopia med copy()

Metoden copy() skapar en ytlig kopia av en Python-ordbok.

>>> person_kopia = person.copy()

Här skapas person_kopia som en ytlig kopia av person. Låt oss nu modifiera denna kopia genom att ändra ’namn’-nyckeln till ’Bob’.

>>> person_kopia['namn'] = 'Bob'
>>> person_kopia

Om du inspekterar innehållet i person_kopia, ser vi att ’namn’ har uppdaterats till ’Bob’.

{
 'namn': 'Bob', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare'
}

Den ursprungliga person-ordboken har däremot inte förändrats.

>>> person
{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare'
}

Ange standardvärden med setdefault()

När man arbetar med Python-ordböcker är det vanligt att stöta på KeyError-fel om en nyckel inte finns i ordboken. Här är ett exempel där vi försöker komma åt ’ålder’-nyckeln:

>>> person['ålder']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'ålder'

Dessa fel kan undvikas genom att använda metoderna setdefault() och get() istället för att komma åt värdet direkt.

Metoden setdefault(nyckel) returnerar dict['nyckel'] om nyckeln finns i ordboken.

>>> person.setdefault('namn')
'Alice'

Om nyckeln inte finns, läggs den till i ordboken med standardvärdet None.

>>> person.setdefault('adress')
>>> person

Här fanns inte ’adress’-nyckeln i person-ordboken. Men vi ser att den har lagts till med standardvärdet None.

{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare', 
 'adress': None 
}

Nu kan vi ange ’adress’-nyckeln till en konkret adress:

>>> person['adress'] = "10, xyz gatan"
>>> person
{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare', 
 'adress': '10, xyz gatan' 
}

Du kan även ange värdet direkt i metoden, som nedan:

>>> person.setdefault('land','USA')
'USA'
>>> person

Eftersom ’land’-nyckeln inte fanns från början i person-ordboken, ser vi att den lagts till med värdet ’USA’.

{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare', 
 'adress': '10, xyz gatan', 
 'land': 'USA'
}

Hämta ett specifikt värde med get()

Metoden get() returnerar värdet som motsvarar en given nyckel. Den kan också ta ett valfritt andra argument, som är standardvärdet som returneras om nyckeln inte hittas.

När vi försöker hämta värdet för ’namn’-nyckeln, får vi ’Alice’ eftersom nyckeln finns i person-ordboken:

>>> person.get('namn')
'Alice'

person-ordboken har ingen ’betyg’-nyckel. När vi försöker hämta dess värde, får vi ingenting i Python REPL, men om vi skriver ut värdet får vi None.

>>> person.get('betyg')
>>> print(person.get('betyg'))
None

Men om vi anger ett standardvärde, får vi detta istället för None.

>>> person.get('betyg','inte hittat')
'inte hittat'

Metoden get() lägger däremot inte till ’betyg’-nyckeln i ordboken.

>>> person
{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare', 
 'adress': '10, xyz gatan', 
 'land': 'USA'
}

Skillnaden mellan setdefault() och get()

Både setdefault() och get() kan användas för att hantera KeyError-fel. Låt oss sammanfatta skillnaderna:

  • dict.setdefault(nyckel, värde) lägger till nyckeln med angivet värde som standard. Om värde inte anges läggs nyckeln till med standardvärdet None.
  • dict.get(nyckel, värde) returnerar värdet som motsvarar nyckeln. Om nyckeln inte finns returnerar den värde (om angivet) eller None, men lägger inte till nyckeln i ordboken.

Du kan också använda defaultdict i Python för att hantera KeyError på ett mer sofistikerat sätt.

Uppdatera innehållet med update()

En befintlig Python-ordbok kan uppdateras med nyckel-värdepar från en annan ordbok eller från en godtycklig Python-iterabel med hjälp av update()-metoden.

Låt oss definiera en mer_info-ordbok, och sedan uppdatera person-ordboken med innehållet från mer_info.

>>> mer_info = {'hobby':'sjunga', 'gillar':'godis'}
>>> person.update(mer_info)

Utifrån resultatet nedan ser vi att ’hobby’ och ’gillar’ har lagts till i person-ordboken.

>>> person
{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare', 
 'adress': '10, xyz gatan', 
 'land': 'USA', 
 'hobby': 'sjunga', 
 'gillar': 'godis'
}

Ta bort det sist tillagda objektet med popitem()

Metoden popitem() tar bort det senast tillagda nyckel-värdeparet från ordboken.

>>> person.popitem()
('gillar', 'godis')

Som vi ser returnerar anropet på popitem() det senast tillagda paret (’gillar’, ’godis’), samtidigt som det tar bort det från ordboken.

Detta kan bekräftas genom att inspektera ordbokens innehåll.

>>> person
{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare', 
 'adress': '10, xyz gatan', 
 'land': 'USA', 
 'hobby': 'sjunga'
}

Ta bort ett specifikt objekt med pop()

Vi vet att popitem() tar bort och returnerar det sista paret i en ordbok. Men ibland kan det vara nödvändigt att ta bort andra objekt. Det är där metoden pop() kommer in i bilden. Genom att anropa .pop(nyckel) tar vi bort och returnerar värdet motsvarande den angivna nyckeln.

Här är ett exempel:

>>> person.pop('hobby')
'sjunga'

När vi har ”poppat” objektet motsvarande nyckeln ’hobby’, ser vi att det inte längre finns i ordboken.

>>> person
{
 'namn': 'Alice', 
 'stad': 'Portland', 
 'intresse': 'Programmering', 
 'yrke': 'Utvecklare', 
 'adress': '10, xyz gatan', 
 'land': 'USA'
}

Om vi anger en nyckel som inte finns, genereras ett KeyError-undantag:

>>> person.pop('ålder')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'ålder'

Här har vi stött på ett KeyError eftersom ’ålder’-nyckeln inte finns i person-ordboken.

Till skillnad från listans pop()-metod som tar bort det sista objektet som standard, kräver ordbokens pop()-metod att en nyckel anges. Om ingen nyckel anges, genereras ett fel.

>>> person.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 argument, got 0

Ta bort alla objekt med clear()

Metoderna pop() och popitem() tar bort ett nyckel-värdepar i taget. Om du vill ta bort alla objekt i en ordbok kan du använda metoden clear().

>>> person.clear()
>>> person
{}

Som vi ser har anropet på clear()-metoden tagit bort alla nyckel-värdepar i person-ordboken, vilket resulterar i en tom ordbok.

Sammanfattning av Python-ordboksmetoder

Här är en snabb sammanfattning av de Python-ordboksmetoder vi har lärt oss:

Metod Syntax Beskrivning
keys() dict1.keys() Returnerar alla nycklar i dict1.
values() dict1.values() Returnerar alla värden i dict1.
items() dict1.items() Returnerar en lista av alla nyckel-värdepar i dict1.
copy() dict1.copy() Returnerar en ytlig kopia av dict1.
setdefault() dict1.setdefault(nyckel, standard_värde)
  • Lägger till nyckel med angivet standard_värde som värde i dict1 (om inget anges används None som standard).
  • Returnerar dict1[nyckel] om nyckeln redan finns.
get() dict1.get(nyckel, standard_värde)
  • Returnerar dict1[nyckel] om nyckeln finns i dict1; annars returneras standard_värde.
  • Om nyckel inte finns i dict1 och standard_värde inte är angivet, returneras None.
update() dict1.update(itererbar1) Uppdaterar dict1 med nyckel-värdepar från itererbar1.
popitem() dict1.popitem() Tar bort och returnerar det senast tillagda nyckel-värdeparet från dict1.
pop() dict1.pop(nyckel)
  • Tar bort och returnerar värdet som motsvarar nyckel: dict1[nyckel].
  • Genererar ett KeyError om nyckel inte finns i dict1.
clear() dict1.clear() Tar bort alla objekt från dict1.

Slutsats

Du har nu lärt dig hur man använder vanliga metoder för att läsa, uppdatera och ta bort information från Python-ordböcker. Du har också sett hur metoderna get() och setdefault() kan användas för att hantera KeyError genom att returnera ett standardvärde eller lägga till en ny post med ett standardvärde. Dessutom är det möjligt att sortera Python-ordböcker baserat på nycklar eller värden.

Utforska sedan gärna listan över användbara Python-listmetoder. Lycka till med din kodning!