10 корисних метода Питхон речника

Da li želite da steknete znanje o radu sa rečnicima u Pajtonu? Ovaj vodič će vas upoznati sa metodama koje se koriste za čitanje, izmenu i izvršavanje raznih operacija nad Pajton rečnicima.

Započećemo pregledom osnovnih karakteristika Pajton rečnika, zatim ćemo kreirati primer rečnika i modifikovati ga koristeći metode koje Pajton nudi za rad sa rečnicima.

Krenimo odmah…

Osnovne informacije o Pajton rečnicima

Rečnici su ugrađene strukture podataka u Pajtonu. Omogućavaju vam da skladištite podatke u parovima ključ-vrednost, uspostavljajući asocijaciju ili mapiranje između ključeva i njihovih vrednosti.

Ključevi u rečniku moraju biti jedinstveni (moraju biti hešabilni). Ključ se koristi za pronalaženje odgovarajuće vrednosti, ili se mogu koristiti ugrađene metode (koje ćemo uskoro proučiti).

Prilikom kreiranja Pajton rečnika, možete odmah definisati sve parove ključ-vrednost, ili možete inicijalizovati prazan rečnik, pa kasnije dodavati parove ključ-vrednost.

>>> dict1 = {'jezik':'Python','sviđa_mi_se':True}
>>> type(dict1)
<class 'dict'>

# ili mozemo uraditi sledece:

>>> dict1 = {}
>>> dict1['jezik']='Python'
>>> dict1['sviđa_mi_se']=True

Metode Pajton rečnika za najčešće operacije

Važna napomena: Za praćenje primera koda, neophodno je da imate instaliran Pajton 3.7 ili noviju verziju.

Možete kodirati zajedno u Pajton REPL-u. Ili, možete koristiti vdsvdz online Pajton editor.

>>> osoba = {'ime':'Alisa',
...           'grad':'Portland',
...           'interesovanje':'Programiranje',
...           'zanimanje':'Programer'
...           }

Sada kada smo inicijalizovali Pajton rečnik, počnimo sa pregledom različitih metoda koje rečnik nudi.

Pristup ključevima rečnika pomoću keys()

Uobičajena operacija prilikom rada sa Pajton rečnikom je pristup svim ključevima, vrednostima, kao i parovima ključ/vrednost. Za pristup ključevima rečnika, koristite metodu keys(), kao što je prikazano:

>>> osoba.keys()
dict_keys(['ime', 'grad', 'interesovanje', 'zanimanje'])

Pristup vrednostima rečnika pomoću values()

Metoda values() vraća sve vrednosti i korisna je kada želite da dalje procesuirate te vrednosti.

Pristupimo svim vrednostima u rečniku osoba:

>>> osoba.values()
dict_values(['Alisa', 'Portland', 'Programiranje', 'Programer'])

Pristup parovima ključ-vrednost pomoću items()

Metoda items() vraća listu parova ključ/vrednost. Pozivanje ove metode na rečniku osoba vratiće listu parova ključ/vrednost:

>>> osoba.items()
dict_items([('ime', 'Alisa'), ('grad', 'Portland'), ('interesovanje', 'Programiranje'), 
           ('zanimanje', 'Programer')])

Kreiranje plitke kopije pomoću copy()

Metoda copy() vraća plitku kopiju Pajton rečnika.

>>> osoba_kopija = osoba.copy()

U ovom slučaju, osoba_kopija je plitka kopija rečnika osoba. Izmenimo ovu kopiju, tako što ćemo ažurirati ključ ‘ime’ u ‘Bob’.

>>> osoba_kopija['ime'] = 'Bob'
>>> osoba_kopija

Ako pogledate sadržaj rečnika, videćete da je ‘ime’ ažurirano u ‘Bob’.

{
 'ime': 'Bob', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer'
}

Međutim, originalni rečnik osoba nije izmenjen.

>>> osoba
{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer'
}

Postavljanje podrazumevanih vrednosti pomoću setdefault()

Prilikom rada sa Pajton rečnicima, često se susrećemo sa KeyError izuzetkom ako ključ ne postoji u rečniku. Evo primera kada pokušamo da pristupimo ključu „godine“:

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

Ovakve greške možete izbeći korišćenjem ugrađenih metoda setdefault() i get(), umesto direktnog pristupa vrednosti, kao što je prikazano gore.

Metoda setdefault(key) vraća dict[‘key’] ako ključ postoji u rečniku.

>>> osoba.setdefault('ime')
'Alisa'

Ako ključ ne postoji, on se dodaje u rečnik sa podrazumevanom vrednošću None.

>>> osoba.setdefault('adresa')
>>> osoba

Ovde ključ ‘adresa’ ne postoji u rečniku osoba. Vidimo da je dodat sa podrazumevanom vrednošću None.

{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer', 
 'adresa': None 
}

Sada možemo postaviti vrednost ključa ‘adresa’ na neku konkretnu adresu:

>>> osoba['adresa'] = "10, xyz ulica"
>>> osoba
{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer', 
 'adresa': '10, xyz ulica' 
}

Takođe možete navesti vrednost u pozivu metode, kao što je prikazano:

>>> osoba.setdefault('zemlja','SAD')
'SAD'
>>> osoba

Pošto ključ ‘zemlja’ inicijalno nije postojao u rečniku osoba, vidimo da je dodat sa vrednošću ‘SAD’.

{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer', 
 'adresa': '10, xyz ulica', 
 'zemlja': 'SAD'
}

Pristup određenoj vrednosti pomoću get()

Metoda get() vraća vrednost koja odgovara ključu. Takođe, opciono prima drugu podrazumevanu vrednost koja se vraća ukoliko ključ ne postoji u rečniku.

Kada pokušamo da pristupimo vrednosti ključa ‘ime’, dobijamo ‘Alisa’, pošto ključ postoji u rečniku osoba:

>>> osoba.get('ime')
'Alisa'

Rečnik osoba nema ključ ‘prosek’. Kada pokušamo da pristupimo njegovoj vrednosti, ne dobijamo ništa u Pajton REPL-u. Međutim, ako odštampate vrednost, dobićete None.

>>> osoba.get('prosek')
>>> print(osoba.get('prosek'))
None

Ali, ako unesete opcionu podrazumevanu vrednost, dobijamo tu vrednost umesto None.

>>> osoba.get('prosek','nije pronadjen')
'nije pronadjen'

Međutim, metoda get() ne dodaje ključ ‘prosek’ u rečnik.

>>> osoba
{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer', 
 'adresa': '10, xyz ulica', 
 'zemlja': 'SAD'
}

Razumevanje razlika između setdefault() i get()

Iako se metode setdefault() i get() mogu koristiti za obradu KeyError izuzetaka, sumirajmo razlike:

  • dict.setdefault(ključ, vrednost) dodaje ključ sa vrednošću kao podrazumevanom vrednošću. Ako vrednost nije specificirana, ključ se dodaje sa podrazumevanom vrednošću None.
  • dict.get(ključ, vrednost) vraća vrednost koja odgovara ključu iz Pajton rečnika. Ako ključ ne postoji, vraća vrednost (ako je specificirana) ili None – ali ne dodaje ključ u rečnik.

Možete koristiti i defaultdict u Pajtonu za još bolje rešavanje KeyError-a.

Ažuriranje sadržaja rečnika pomoću update()

Možete ažurirati postojeći Pajton rečnik korišćenjem parova ključ/vrednost iz drugog rečnika. Takođe možete ažurirati sadržaj bilo kog Pajton iterejbl (iterable) objekta pomoću metode update().

Definišimo rečnik dodatni_detalji. Zatim ažuriramo rečnik osoba sa sadržajem iz dodatni_detalji rečnika:

>>> dodatni_detalji = {'hobi':'pevanje', 'omiljeno':'slatkiši'}
>>> osoba.update(dodatni_detalji)

Iz izlaza ispod, vidimo da su ključevi ‘hobi’ i ‘omiljeno’ dodati u rečnik osoba.

>>> osoba
{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer', 
 'adresa': '10, xyz ulica', 
 'zemlja': 'SAD', 
 'hobi': 'pevanje', 
 'omiljeno': 'slatkiši'
}

Uklanjanje poslednje dodate stavke pomoću popitem()

Metoda popitem() rečnika se koristi za uklanjanje poslednjeg dodatog para ključ-vrednost.

>>> osoba.popitem()
('omiljeno', 'slatkiši')

Kao što se vidi, pozivanje metode popitem() na rečniku osoba vraća par ključ-vrednost (‘omiljeno’, ‘slatkiši’) – poslednju dodatu stavku u rečnik.

Takođe uklanja par ključ-vrednost. Možete ovo potvrditi pregledom sadržaja rečnika:

>>> osoba
{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer', 
 'adresa': '10, xyz ulica', 
 'zemlja': 'SAD', 
 'hobi': 'pevanje'
}

Uklanjanje stavke iz rečnika pomoću pop()

Znamo da metoda popitem() rečnika uklanja i vraća poslednji par ključ/vrednost u Pajton rečniku. Međutim, nekada je neophodno ukloniti druge stavke – ne samo poslednji dodati par ključ/vrednost.

Da bismo to uradili, možemo koristiti metodu pop() Pajton rečnika: korišćenje .pop(ključ) na rečniku vraća vrednost koja odgovara ključu i takođe uklanja par ključ-vrednost iz rečnika.

Evo primera:

>>> osoba.pop('hobi')
'pevanje'

Nakon što smo uklonili stavku koja odgovara ključu ‘hobi’, vidimo da više ne postoji u rečniku.

>>> osoba
{
 'ime': 'Alisa', 
 'grad': 'Portland', 
 'interesovanje': 'Programiranje', 
 'zanimanje': 'Programer', 
 'adresa': '10, xyz ulica', 
 'zemlja': 'SAD'
}

Ako prosledimo ključ koji ne postoji, nailazimo na KeyError izuzetak, kao što je prikazano:

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

Ovde nailazimo na KeyError izuzetak, pošto ključ ‘godine’ ne postoji u rečniku osoba.

Za razliku od metode pop() liste koja podrazumevano uklanja poslednju stavku, metoda pop() rečnika zahteva ključ. Ako ne navedete ključ u metodi, naićićemo na grešku.

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

Brisanje svih stavki rečnika pomoću clear()

Metode pop() i popitem() rečnika uklanjaju jedan po jedan par ključ-vrednost. Ako želite da obrišete sve stavke iz rečnika, možete koristiti metodu clear().

>>> osoba.clear()
>>> osoba
{}

Kao što se vidi, pozivanje metode clear() na rečniku osoba uklanja sve parove ključ-vrednost, i rečnik osoba je sada prazan.

Pregled metoda Pajton rečnika

Evo kratkog pregleda metoda Pajton rečnika koje smo naučili.

Metoda Sintaksa Opis
keys() dict1.keys() Vraća ključeve dict1
values() dict1.values() Vraća vrednosti dict1
items() dict1.items() Vraća listu svih parova ključ-vrednost u dict1
copy() dict1.copy() Vraća plitku kopiju dict1
setdefault() dict1.setdefault(kljuc, podrazumevana_vrednost) – Dodaje ključ sa opcionom podrazumevana_vrednost kao ključ za dict1 (kada nije navedeno, podrazumevana vrednost je None)
– Vraća dict1[ključ] ako ključ već postoji
get() dict1.get(kljuc,podrazumevana_vrednost) – vraća dict1[ključ] ako ključ postoji u dict1; Inače, vraća podrazumevana_vrednost
– Ako ključ ne postoji u dict1 i podrazumevana_vrednost nije navedena, vraća None
update() dict1.update(iterabilni_objekat) Ažurira dict1 sa parovima ključ-vrednost iz iterabilnog_objekta
popitem() dict1.popitem() Uklanja i vraća poslednji par ključ-vrednost iz dict1
pop() dict1.pop(kljuc) – Uklanja i vraća vrednost koja odgovara ključu: dict1[ključ]
– Pokreće KeyError ako ključ ne postoji u dict1
clear() dict1.clear() Briše sve stavke iz dict1

Zaključak

Naučili ste kako da koristite uobičajene metode za obavljanje operacija čitanja, ažuriranja i brisanja nad Pajton rečnicima. Osim toga, naučili ste i kako se metode get() i setdefault() mogu koristiti za obradu KeyError izuzetaka, vraćanjem podrazumevane vrednosti i dodavanjem unosa sa podrazumevanom vrednošću u Pajton rečnik. Takođe možete sortirati Pajton rečnik po ključu ili vrednosti.

Dalje, pogledajte listu korisnih metoda Pajton liste. Srećno kodiranje!