2.9. Rječnici

Rječnik je preslikavanje ključeva u vrijednosti. Svaki ključ pretražuje se izravno; rječnik pamti koja je vrijednost zadnja bila pridružena tom ključu.

2.9.1. Stvaranje rječnika

Koristite vitičaste zagrade s parovima key: value ili konstruktor dict:

empty   = {}
person  = {"name": "OpenMV", "id": 42}
counts  = dict(a=1, b=2, c=3)            # keyword form
pairs   = dict([("x", 1), ("y", 2)])     # from a list of pairs

Vrijednosti mogu biti bilo kojeg tipa – nizovi, brojevi, liste, čak i drugi rječnici:

config = {
    "name":  "OpenMV",
    "id":    42,
    "width": 320,
    "tags":  ["red", "round"],
}
Rječnik prikazan u dva stupca: ključevi lijevo, vrijednosti desno, sa strelicama koje povezuju svaki par.

Svaki ključ u rječniku preslikava se u točno jednu vrijednost.

2.9.2. Pristup i pripadnost

Indeksiranje pomoću [] dohvaća vrijednost za ključ. Nepostojeći ključ izaziva KeyError:

>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'

Za blaže pretraživanje koristite dict.get(). Vraća None za nepostojeći ključ ili vrijednost koju proslijedite kao drugi argument:

>>> person.get("name")
'OpenMV'
>>> person.get("missing")            # returns None
>>> person.get("missing", "n/a")
'n/a'

Ključna riječ in provjerava pripadnost ključa – ne vrijednosti:

>>> "name" in person
True
>>> "OpenMV" in person
False

2.9.3. Dodavanje, ažuriranje i uklanjanje

Pridruživanje u d[key] dodaje unos ako je ključ nov, a prepisuje ga ako već postoji:

>>> person["seen"] = 1
>>> person["seen"] = 2               # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}

Uklanjanje ima nekoliko oblika:

  • del d[key] – uklanja unos; izaziva KeyError ako ključ ne postoji.

  • dict.pop() – uklanja i vraća vrijednost; neobavezna zadana vrijednost omogućuje izbjegavanje iznimke.

  • dict.clear() – uklanja svaki unos.

dict.update() spaja drugi rječnik (ili listu parova (key, value)) u primatelja, prepisujući sve podudarne ključeve:

>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}

2.9.4. Iteriranje

Izravno iteriranje rječnika daje njegove ključeve, redoslijedom umetanja:

for k in person:
    print(k)

Tri pogleda pružaju izričit pristup:

for key, value in person.items():
    print(key, "=", value)

2.9.5. Što može biti ključ

Ključevi rječnika moraju biti raspršivi (hashable) – njihova vrijednost ne smije se mijenjati tijekom njihova vijeka. Uobičajeni raspršivi tipovi su:

Promjenjivi tipovi poput list, dict i bytearray ne mogu biti ključevi; korištenje jednog od njih izaziva TypeError. Torke nepromjenjivih vrijednosti standardni su način za ključanje rječnika složenim identifikatorom kao što je 2-D koordinata mreže:

>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"

2.9.6. Duljina

len() vraća broj unosa:

>>> len(person)
4