2.9. Slovníky¶
Slovník je mapování klíčů na hodnoty. Každý klíč se vyhledává přímo; slovník si pamatuje, jaká hodnota byla naposledy přiřazena danému klíči.
2.9.1. Vytváření slovníků¶
Použijte složené závorky s dvojicemi key: value nebo 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
Hodnoty mohou být libovolného typu – řetězce, čísla, seznamy, dokonce i další slovníky:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Každý klíč ve slovníku se mapuje přesně na jednu hodnotu.¶
2.9.2. Přístup a členství¶
Indexování pomocí [] načte hodnotu pro daný klíč. Chybějící klíč vyvolá KeyError:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Pro shovívavé vyhledání použijte dict.get(). Pro chybějící klíč vrátí None, nebo hodnotu, kterou předáte jako druhý argument:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
Klíčové slovo in testuje členství klíče – nikoli hodnoty:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Přidávání, aktualizace a odebírání¶
Přiřazení do d[key] přidá záznam, pokud je klíč nový, a přepíše jej, pokud již existuje:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
Odebírání má několik podob:
del d[key]– odebere záznam; vyvoláKeyError, pokud klíč chybí.dict.pop()– odebere a vrátí hodnotu; volitelná výchozí hodnota umožňuje vyhnout se výjimce.dict.clear()– odebere všechny záznamy.
dict.update() sloučí jiný slovník (nebo seznam dvojic (key, value)) do příjemce a přepíše všechny shodující se klíče:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Iterování¶
Přímá iterace slovníku poskytuje jeho klíče v pořadí vkládání:
for k in person:
print(k)
Tři pohledy poskytují explicitní přístup:
dict.keys()– klíče (stejné jako iterace slovníku).dict.values()– hodnoty.dict.items()– n-tice(key, value), ideální pro rozbalení ve smyčce.
for key, value in person.items():
print(key, "=", value)
2.9.5. Co může být klíčem¶
Klíče slovníku musí být hashovatelné – jejich hodnota se nesmí během jejich životnosti měnit. Běžné hashovatelné typy jsou:
Měnitelné typy jako list, dict a bytearray nemohou být klíči; jejich použití vyvolá TypeError. N-tice neměnných hodnot jsou standardním způsobem, jak indexovat slovník složeným identifikátorem, například 2D souřadnicí mřížky:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Délka¶
len() vrací počet záznamů:
>>> len(person)
4