Rječnik (Dictionary)

Dictionary (rječnik) je tip podataka sličan polju, samo što index nije cjeli broj nego bilo koji immutable tip podataka kao što su stringovi ili brojevi.

Kreiranje

dana = dict()   #ili dana = {}
dana['siječanj'] = 31
dana[2] = 28
print dana
print dana[2]
print dana['siječanj']
{'sije\xc4\x8danj': 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 dana.keys()
['sijecanj', 'mj2']
>>> print dana.values()
[31, 28]
>>> print 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 dana.keys():
  print k, dana[k]
veljača 28
ožujak 31
sijecanj 31
travanj 30
mj2 28
dana = {'siječanj':"trideset jedan", 2:28}
print 'siječanj' in dana
print 'svibanj' in dana
True
False

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
limun 1
jabuka 2

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
limun 1
jabuka 2

Dodatni primjeri na https://docs.python.org/2/library/collections.html#defaultdict-examples.