Python - Rječnik (Dictionary)


Kreiranja Python rječnika

Stvaranje rječnika jednostavno je poput stavljanja predmeta unutar vitičastih zagrada {} odvojenih zarezima. Stavka ima ključ i odgovarajuću vrijednost koja se izražava u paru (ključ: vrijednost (key: value)). Iako vrijednosti mogu biti bilo kojeg tipa podataka i mogu se ponoviti, ključevi moraju biti nepromjenjivog tipa (string, broj ili skup sa nepromjenjivim elementima) i moraju biti jedinstveni.

# prazan rječnik (dictionary)
my_dict = {}

# rječnik (dictionary) sa integer ljučem
my_dict = {1: 'jabuka', 2: 'lopta'}

# rječnik (dictionary) sa izmješanim ključevima
my_dict = {'ime': 'Miloš', 1: [2, 4, 3]}

# korištenje dict()
my_dict = dict({1:'jabuka', 2:'lopta'})

# iz niza koji ima svaki predmet u paru
my_dict = dict([(1,'jabuka'), (2,'lopta')])

Kao što vidite iz prethodnog primjera, možemo stvoriti i rječnik koristeći ugrađenu funkciju dict().



Pristup elementima rječnika (Dictionary)

Dok se indeksiranje koristi s drugim vrstama podataka za pristup vrijednostima, rječnik koristi ključeve. Ključevi se mogu koristiti ili unutar uglatih zagrada [] ili pomoću metode get(). Ako koristimo uglate zagrade [], KeyError se podiže u slučaju da ključ nije pronađen u rječniku. S druge strane, metoda get() vraća None ako ključ nije pronađen.

# get vs [] za dohvatanje elemenata
my_dict = {'name': 'Miloš', 'age': 29}

# Ispisuje: Miloš
print(my_dict['name'])

# Ispisuje: 29
print(my_dict.get('age'))

# Pokušaj pristupa ključevima koji ne postoje dovodi do greške
# Ispisuje None
print(my_dict.get('address'))

# KeyError
print(my_dict['address'])


Promjena i dodavanje elemenata rječnika (Dictionary)

Rječnici su promjenjivi. Možemo dodati nove stavke ili promijeniti vrijednost postojećih pomoću operatora dodjele. Ako je ključ već prisutan, tada se postojeća vrijednost ažurira. U slučaju da ključ nije prisutan, novi rječnik (ključ: vrijednost (key: value)) dodaje se u rječnik.

# Promjena i dodavanje rječničkih elemenata
my_dict = {'name': 'Miloš', 'age': 29}

# vrijednost ažuriranja
my_dict['age'] = 30

#Ispisuje: {'age': 30, 'name': 'Miloš'}
print(my_dict)

# dodaj stavku
my_dict['address'] = 'Banja Luka'

# Ispisuje: {'address': 'Banja Luka', 'age': 30, 'name': 'Miloš'}
print(my_dict)


Uklanjanje elemenata iz rječnika (Dictionary)

Određenu stavku u rječniku možemo ukloniti metodom pop(). Ova metoda uklanja stavku s navedenim ključem i vraća vrijednost. Metoda popitem() može se koristiti za uklanjanje i vraćanje proizvoljnog para stavki (ključ, vrijednost (key, value)) iz rječnika. Sve stavke mogu se ukloniti odjednom, koristeći metodu clear().

# Uklanjanje elemenata iz rječnika

# kreiranje rječnika (dictionary)
squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# ukloni određenu stavku, vraća joj vrijednost
# Ispisuje: 16
print(squares.pop(4))

# Ispisuje: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)

# ukloniti proizvoljnu stavku, vratiti (ključ, vrijednost) (key,value)
# Ispisuje: (5, 25)
print(squares.popitem())

# Ispisuje: {1: 1, 2: 4, 3: 9}
print(squares)

# uklonite sve stavke
squares.clear()

# Ispisuje: {}
print(squares)

# izbrišite sam rječnik (dictionary)
del squares

# Throws Error
print(squares)


Metode Python rječnika (Dictionary Methods)

Metode dostupne s rječnikom navedene su sljedećoj tablemi. Neke od njih su već korištene u gornjim primjerima.

Metoda Opis
clear() Uklanja sve stavke iz rječnika.
copy() Vraća plitku kopiju rječnika.
fromkeys(seq[, v]) Vraća novi rječnik s ključevima iz seq i vrijednošću jednakom v (zadane vrijednosti None).
get(key[,d]) Vraća vrijednost ključa. Ako ključ ne postoji, vraća d (zadane vrijednosti None).
items() Vraća novi objekt stavki rječnika u formatu (ključ, vrijednost (key, value)).
keys() Vraća novi objekt ključeva rječnika.
pop(key[,d]) Uklanja stavku ključem i vraća joj vrijednost ili d ako key nije pronađen. Ako d nije naveden i key nije pronađen, podiže KeyError.
popitem() Uklanja i vraća proizvoljnu stavku (ključ, vrijednost (key, value)). Većava KeyError ako je rječnik prazan.
setdefault(key[,d]) Vraća odgovarajuću vrijednost ako je key u rječniku. Ako nije, ubacuje ključ s vrijednošću d i vraća d (zadane vrijednosti None).
update([other]) Ažurira rječnik parovima ključ/vrijednost s drugih, prepisujući postojeće ključeve.
values() Vraća novi objekt vrijednosti rječnika

Evo nekoliko primjera upotrebe ovih metoda.

# Rečničke metode (Dictionary Methods)
marks = {}.fromkeys(['Matematika', 'Engleski', 'Hemija'], 0)

# Ispisuje: {'Engleski': 0, 'Matematika': 0, 'Hemija': 0}
print(marks)

for item in marks.items():
    print(item)

# Ispisuje: ['Engeski', 'Matematika', 'Hemija']
print(list(sorted(marks.keys())))


Razumijevanje Python rječnika (dictionary)

Razumijevanje rječnika elegantan je i jezgrovit način za stvaranje novog rječnika iz iterable u Pythonu. Razumijevanje rječnika sastoji se od para izraza (ključ: vrijednost (key: value)) nakon kog sljedi izraz for unutar vitičastih zagrada {}. Evo primjera za izradu rječnika sa svakom stavkom u paru broja i njegovog kvadrata.

# Razumijevanje rječnika (Dictionary)
squares = {x: x*x for x in range(6)}

print(squares)

Ovaj kod je ekvivalentan

squares = {}
for x in range(6):
    squares[x] = x*x
print(squares)

Razumijevanje rječnika po želji može da sadrži više izjava for ili if. Neobavezna naredba if može filtrirati stavke kako bi formirala novi rječnik (dictionary). Evo nekoliko primjera za izradu rječnika sa samo neparnim stavkama.

# Razumevanje rečnika sa uslovnim if
odd_squares = {x: x*x for x in range(11) if x % 2 == 1}

print(odd_squares)


Ostale operacije sa rječnicima


Test članstva u rječniku

Možemo testirati da li je ključ (key) u rječniku ili ne koristi ključnu riječ in. Primijetite da je test članstva samo za ključeve (key), a ne i za vrijednosti (values).

# Test članstva za ključeve iz rječnika
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

# Ispisuje: True
print(1 in squares)

# Ispisuje: True
print(2 not in squares)

# testovi članstva za ključ samo ne vrijednost
# Ispisuje: False
print(49 in squares)

Iteriracija kroz rječnik

Možemo itirati kroz svaki ključ u rječniku pomoću for petlje.

# Iteracija kroz rječnik (Dictionary)
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
    print(squares[i])

Ugrađene funkcije rječnika

Ugrađene funkcije poput all(), any(), len(), cmp(), sorted() itd. obično se koriste s rječnicima za obavljanje različitih zadataka.

Funkcija Opis
all() Vraća True ako su svi ključevi rječnika True (ili ako je rječnik prazan).
any() Vrati True ako je bilo koji ključ rječnika true. Ako je rječnik prazan, vratite False.
len() Vrati dužinu (broj stavki) u rječniku.
cmp() Upoređuje stavke dva rječnika. (Nije dostupno u Python 3)
sorted() Vrati novu sortiranu listu ključeva u rječniku.

Evo nekoliko primjera koji koriste ugrađene funkcije za rad s rječnikom.

# Ugrađene funkcije rječnika
squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

# Ispisuje: False
print(all(squares))

# Ispisuje: True
print(any(squares))

# Ispisuje: 6
print(len(squares))

# Ispisuje: [0, 1, 3, 5, 7, 9]
print(sorted(squares))