Slovník (dictionary)

Keď ste doteraz používali list, tak ste sa na list asi pozerali ako na nejakú postupnosť prvkov. Na list sa dá ale pozerať aj inak - ak vieme o nejakom prvku jeho pozíciu (index), tak k tomu prvku vieme pristúpiť (vieme zistiť jeho hodnotu, zmeniť ho, ...). Čo ak by sme ale chceli k prvkom pristupovať pomocou niečoho iného, ako celého čísla (napríklad reťazca, alebo desatinného čísla)?

Slovník (dictionary, alebo v niektorých jazykoch aj map) je dátová štruktúra, ktorá robí podobnú vec, ako reálny slovník - vieme sa jej spýtať, aká hodnota je priradené k nejakému kľúču, vieme ju zmeniť, vymazať, ... Je to niečo podobné, ako keď máme papierový slovník a vieme sa pozrieť, ako sa prekladá nejaké slovo (aké slovo je priradené nejakému slovu).

Hovoríme, že k danému kľúču je asociovaná nejaká hodnota (niekedy hovoríme, že hodnotu mapujeme na daný kľúč). Slovník si môžeme predstaviť ako množinu dvojíc (kľúč, hodnota), pričom v takejto množine sa nemôžu nachádzať dve dvojice s rovnakým kľúčom.

Používa sa to podobne ako list:

d = dict()

d[1] = "jeden"
d["dva"] = 2
d["ksp"] = True

print(d)             # vypíše: {1: 'jeden', 'dva': 2, 'ksp': True}
print(d[1])          # vypíše: 'jeden'

d = {"farba": "cervena", "kolesa": 4}

print(d)             # vypíše: {'farba': 'cervena', 'kolesa': 4}
print("farba" in d)  # vypíše: True

d.pop("farba")

print(d)             # vypíše: {'kolesa': 4}
print("farba" in d)  # vypíše: False

Ak chceme nejakým spôsobom prejsť cez všetky prvky v slovníku, máme niekoľko možností, podľa toho, čo presne chceme:

d = {"farba": "cervena", "kolesa": 4}

for i in d:
  print(i, d[i])

for i in d.keys():
  print(i, d[i])

for i in d.values():
  print(i)

for key, val in d.items():
  print(key, val)  

Vkladanie rôznych dátových typov

Asi sa zamýšľate nad tým, aké dátové typy je možné vkladať do slovníka. Odpoveď je, že záleží kam. Pre kľúče platia rovnaké pravidlá ako pre prvky v sete, ale ako hodnotu môžete vložiť do slovníku hocičo :)

d = {"tu bude list": [1,2,3,4], "a tu zase set": {'a' 'b', 'c'}}

print(d["tu bude list"])  # vypíše: [1, 2, 3, 4]