REČNICI (DICTIONARY)
Rečnici
su generalizovana verzija liste.
Listе
nаm dајu mоgućnоst dа оrgаnizuјеmо pоdаtkе zа kоје је pоznаt nеki rеdоslеd i u
kојimа svаki pоdаtаk imа svој rеdni brој (nа primеr, listu smо upоtrеbili dа
оrgаnizuјеmо imеnа putnikа u аviоnu ili pоdаtkе о mеsеcimа u gоdini) i pristup
еlеmеntimа listе vrši sе nа оsnоvu njihоvоg indеksа (rеdnоg brоја, tј.
pоziciје). Меđutim, čеstо pоdаci prеdstаvlјајu nеkо prеslikаvаnjе u kојеm nа
оsnоvu dаtоg klјučа žеlimо dа pristupimо vrеdnоsti kоја је pridružеnа tоm
klјuču. Nа primеr, nа оsnоvu šifrе prоizvоdа pristupаmо njеgоvој cеni, nа
оsnоvu ЈМBG grаđаnа pristupаmо njеgоvоm imеnu, nа оsnоvu brоја bаnkоvnоg rаčunа
pristupаmо iznоsu nоvcа nа tоm rаčunu i sličnо. U tim situаciјаmа umеstо listе
mnоgо је bоlје kоristiti rеčnikе (kаžе sе i mаpе ili аsоciјаtivnе nizоvе).
Lista
koja sadrži broj dana u mesecima godine:
dana = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,
31]
Ako
hoćemo broj dana u januaru, koristimo izraz dana[0]. Decembar ima dana[11] ili
dana[-1].
Rečnik
dana u mesecima godine:
dani = {'Januar':31, 'Februar':28, 'Mart':31,
'April':30, 'Maj':31, 'Jun':30, 'Jul':31, 'Avgust':31,'Septembar':30,
'Oktobar':31, 'Novembar':30, 'Decembar':31}
Da
dobijemo broj dana u januaru pišemo dani[‘Januar’]. Prednost korišćenja rečnika
u ovom slučaju je da je kod mnogo čitljiviji, i da ne treba da razmišljamo koji
je indeks za traženi mesec. Rečnici, kao što ćemo videti, imaju veliki broj
primena.
OSNOVNE OPERACIJE SA REČNICIMA
Kreiranje rečnika
d =
{'A':100, 'B':200}
Da
označimo da je nešto rečnik koristimo vitičaste
zagrade
{ }. Svaki element u rečniku je par podataka razdvojen sa dve tačke. Prvi deo u
paru se naziva ključ (key) a drugi je vrednost (value). Ključ igra ulogu sličnu
indeksu. Tako je u prvom paru našeg primera, ‘A’:100, ključ jednak ‘A’, a
vrednost je jednaka 100, pa d[‘A’] daje 100. Ključevi su često stringovi, ali
mogu biti i celi i decimalni brojevi, kao i mnogo drugih tipova. U istom
rečniku mogu se naći ključevi različitog tipa.
Promena rečnika
Počnimo
sa sledećim rečnikom:
d =
{'A':100, 'B':200}
Da
promenimo d[‘A’] na 400 (umesto 100) pišemo:
d['A']=400
Da
dodamo novi element u rečnik, prosto dodelimo novom ključu neku vrednost kao u
primeru:
d['C']=500
Setite
se da ovo nije moguće sa listama. Ako napišemo L[2]=500 za listu L koja ima
samo dva elementa (L[0] i L[1]) dobićemo „index out of range“ grešku. Za
razliku, kod rečnika je to moguće.
Da
izbrišemo element iz rečnika koristimo operator del
del d['A']
Prazan rečnik
Prazan
rečnik je { }, čemu je analogno [ ] za praznu listu, ili ‘’ za prazan string.
Primeri rečnika
Primer
1:
Rečnik se može
koristiti kao stvarni rečnik definisanja pojmova kao u sledećem primeru:
d =
{'pas' : 'ima dugačak rep i laje!',
'mačka' : 'kaže mjau',
'miš' : 'love ga mačke'}
Evo
i primera kako se taj rečnik može koristiti:
reč
= input('Unesite reč: ')
print('Definicija
reči:', d[reč])
izlaz:
Unesite
reč: miš
Definicija
reči: love ga mačke
Primer 2:
Sledeći rečnik je
koristan za rad sa Rimskim brojevima:
rimski = {‘I’:1, ‘V’:5,
‘X’:10, ‘L’:50, ‘C’:100, ‘D’:500, ‘M’:1000}
Primer 3:
U igri Scrabble, svakom
slovu je pridružena vrednost. Možemo koristiti sledeći rečnik za vrednost slova
u njemu:
points
= {'A':1, 'B':3, 'C':3, 'D':2, 'E':1, 'F':4, 'G':2,
'H':4, 'I':1, 'J':8, 'K':5, 'L':1, 'M':3, 'N':1,
'O':1, 'P':3, 'Q':10, 'R':1, 'S':1, 'T':1, 'U':1,
'V':4, 'W':4, 'X':8, 'Y':4, 'Z':10}
Da
izračunamo skor za neku reč koristimo kod:
skor
= sum([points[c] for c in word])
Ili duža varijanta:
score
= 0
for c in word:
score += points[c]
Rad sa rečnicima
Operator in
Operator in se koristi
da nam kaže da li je neki ključ u rečniku ili nije. Na primer, recimo da imamo
sledeći rečnik:
d =
{'A':100, 'B':200}
Ako
pokušamo da dobijemo vrednost nekog ključa koji nije u rečniku dobićemo grešku.
Na primer print(d[‘C’]) će javiti grešku. Da to sprečimo, možemo da iskoristimo
operator in da proverimo da li je neki ključ u rečniku pre nego što upotrebimo
taj ključ. Evo primera:
slovo
= input('Unesite slovo: ')
if slovo in d:
print('Vrednost je', d[slovo])
else:
print('Nije u rečniku')
Možete
takođe koristiti i not in da proverite da ključ nije u rečniku.
Petlje
Može
se napraviti petlja kroz rečnik na sličan način kao i kod liste. Evo jedan
primer koji štampa sve ključeve iz rečnika:
for kljuc in d:
print(kljuc)
A
evo i primera koji štampa vrednosti iz rečnika:
for kljuc in d:
print(d[kljuc])
clear() Briše sve vrednosti iz rečnika
copy() Kopira rečnik
get() Daje vrednost
određenog ključa
items() Daje listu torki svih
ključ-vrednost parova iz rečnika
keys() Daje listu svih
ključeva
values() Daje listu svih vrednosti iz rečnika
update() Ažurira rečnik novim parom
Skupovi (Sets)
Python ima i strukturu koja se zove set (skup). Set
struktura radi slično matematičkim skupovima. Skupovi su slični listama, ali
bez ponavljanja elemenata. Skupovi se označavaju vitičastim zagradama, {}, npr.
S = {1,2,3,4,5}
Setimo se da se vitičaste zagrade koriste za rečnike,
a da je {} prazan rečnik. Da dobijemo prazan skup koristimo funkciju set bez
argumenata, kao što je prikazano:
S = set()
Funkcija set se može koristiti i za konverziju
objekata u skupove. Evo dva primera:
set([1,4,4,4,5,1,2,1,3])
{1, 2, 3, 4, 5}
set('this is a test')
{'a', ' ', 'e', 'i', 'h', 's', 't'}
Uočite da Python smešta podatke u skup u proizvoljnom
redosledu, i ne uvek u redosledu koji ste vi postavili. Kod skupova nije važan
redosled, več samo podaci koji ga čine. To znači da indeksiranje kod skupova
nema smisla. Zato se ne može , na primer, tražiti s[0], za set s.
Rad sa skupovima
Postoji
nekoliko operacija koje se mogu obavljati sa skupovima.
|
Opis
|
Primer
|
I
|
Unija (union)
|
{1,2,3}|{3,4} ->
{1,2,3,4}
|
&
|
Presek (intersection)
|
{1,2,3}&{3,4} -> {3}
|
-
|
Razlika (difference) (elementi skupa A
koji nisu u skupu B)
|
{1,2,3}-{3,4} ->
{1,2}
|
^
|
Simetrična razlika (symmetric
difference) (elementi koji su samo u A ili samo u B)
|
{1,2,3}^{3,4} -> {1,2,4}
|
in
|
Jeste u skupu
|
3 in {1,2,3} ->
True
|
Na
kraju, možemo slično kao i kod liste sastavljati skupove na skraćeni način:
s =
{i**2 for i in range(12)}
{0,
1, 4, 100, 81, 64, 9, 16, 49, 121, 25, 36}
Primer metoda
koje su nam omogućene u Pajtonu za rečnike:
add() Dodaje element skupu
clear() Uklanja sve elemente
skupa
copy() Daje kopiju skupa
discard() Uklanja odredjenu vrednost iz skupa
issubset() Daje vrednost boolean koji je rezultat operacije da li je
jedan skup podskup drugog
skupa
issuperset() Daje vrednost boolean koji je rezultat operacije da li je
jedan skup nadskup drugog skupa
remove() Uklanja odredjeni
element iz skupa
Napomena: Ovim smo završili predavanja za ovu školsku godinu.
Posle predloga zaključnih ocena koji ću vam poslati do kraja nedelje,
dogovorićemo se oko odgovaranja u školi ako bude potrebe.