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"],
}
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; izazivaKeyErrorako 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:
dict.keys()– ključevi (isto kao iteriranje rječnika).dict.values()– vrijednosti.dict.items()– torke(key, value), savršene za raspakiravanje u petlji.
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