Rječnik (Dictionary)
Dictionary (rječnik) je tip podataka sličan polju, samo što index nije isključivo cjeli broj nego bilo koji immutable tip podataka kao što su stringovi ili brojevi. To znači da su
dopušteni izrazi
a['rezultat'] = a['prvi pribrojnik'] + a['drugi pribrojnik']
ili
a['rezultat'] = a[('pribrojnik',1)] + a[('pribrojnik',2)]
, za razliku od polja gdje je
elementima moguće pristupiti samo pomoću brojčanog indeksa: a[2] = a[0] + a[1]
.
Kreiranje
dana = dict() #ili dana = {}
dana['siječanj'] = 31
dana[2] = 28
print(dana)
print(dana[2])
print(dana['siječanj'])
{'siječanj': 31, 2: 28}
28
31
|
dana = dict(sijecanj=31, mj2=28)
print(dana)
print(dana['mj2'])
print(dana['sijecanj'])
{'sijecanj': 31, 'mj2': 28}
28
31
|
dana = {1:"trideset jedan", "2":28}
print(dana)
print(dana["2"])
print(dana[1])
{1: 'trideset jedan', '2': 28}
28
trideset jedan
|
Očitavanje i mijenjanje
>>> dana = dict(sijecanj=31, mj2=28)
>>> print(dana)
{'sijecanj': 31, 'mj2': 28}
>>> print(dana['mj2'])
28
>>> print(dana['sijecanj'])
31
>>> print(list(dana.keys()))
['sijecanj', 'mj2']
>>> print(list(dana.values()))
[31, 28]
>>> print(list(dana.items()))
[('sijecanj', 31), ('mj2', 28)]
|
dana = dict(sijecanj=31, mj2=28)
dana.update({
'veljača':28,
'travanj':30})
dana['ožujak'] = 31
for k in list(dana.keys()):
print(k, dana[k])
sijecanj 31
mj2 28
veljača 28
travanj 30
ožujak 31
|
dana = {'siječanj':"trideset jedan", 2:28}
print('siječanj' in dana)
print('svibanj' in dana)
|
Primjer: brojanje ponavljanja riječi u listi
L = ["kruška","jabuka","jabuka","limun","kruška","kruška"]
brojac = {}
for i in L:
if i in brojac:
brojac[i] += 1
else:
brojac[i] = 1
for k in brojac:
print(k, brojac[k])
kruška 3
jabuka 2
limun 1
U gornjem primjeru smo pazili da ne pokušamo očitati vrijednost brojac[i]
ako ključ i
već nije u rječniku brojac
. Da bi se ta provjera izbjegla, moguće je zadati default vrijednosti nekom rječniku koristeći funkciju dict.setdefault()
ili klasu collections.defaultdict
:
from collections import defaultdict
dana = defaultdict( lambda: 31 )
dana["veljača"]=28
dana["travanj"]=30
L = ["siječanj", "veljača", "ožujak", "travanj", "bilo što"]
for i in L:
print(i, dana[i])
siječanj 31
veljača 28
ožujak 31
travanj 30
bilo što 31
Brojanje riječi se, prema tome, može riješiti i ovako:
from collections import defaultdict
L = ["kruška","jabuka","jabuka","limun","kruška","kruška"]
brojac = defaultdict( lambda: 0 )
for i in L:
brojac[i] += 1
for k in brojac:
print(k, brojac[k])
kruška 3
jabuka 2
limun 1
Dodatni primjeri na https://docs.python.org/3/library/collections.html#defaultdict-examples.