V telefonu nehledáš číslo podle pořadí („dej mi 57. kontakt“). Hledáš podle jména: „Máma“. Jméno je klíč, číslo je hodnota, která k němu patří.
Přesně tak funguje slovník v Pythonu. Hodí se všude, kde k něčemu patří něco jiného: zboží → cena, žák → známka, slovo → překlad. A druhá užitečná struktura, množina, hlídá, aby se nic neopakovalo.
ceny = {"jablko": 25, "hruska": 30}"jablko"25{1, 2, 2, 3} je ve skutečnosti {1, 2, 3}.| Zápis | Co udělá | ceny = {"jablko": 25, "hruska": 30} |
|---|---|---|
ceny["jablko"] | hodnota pro klíč | 25 |
ceny["banan"] = 10 | přidá novou dvojici | 3 dvojice |
ceny["jablko"] = 20 | přepíše hodnotu existujícího klíče | jablko stojí 20 |
del ceny["hruska"] | smaže dvojici | hruška zmizí |
"hruska" in ceny | je tam klíč? | True |
ceny.get("kiwi", 0) | hodnota, nebo náhradní hodnota | 0 |
for zbozi, cena in ceny.items(): print(f"{zbozi}: {cena} Kč")Metoda items() dává dvojice klíč–hodnota. Samotné for k in ceny: prochází jen klíče.
["a", "b", "a", "c", "a"] opakuje každé písmeno.pocty = {}, pak for p in seznam: → pocty[p] = pocty.get(p, 0) + 1. get vrátí dosavadní počet, nebo 0, když písmeno ještě nebylo. Výsledek: {'a': 3, 'b': 1, 'c': 1}.ceny["kiwi"], když kiwi ve slovníku není?if "kiwi" in ceny: nebo ceny.get("kiwi"), které vrátí None.ceny[0] vrátí první dvojici ze slovníku.ceny["jablko"].Slovník se neindexuje pořadím, ale klíči. ceny[0] hledá klíč 0 a skončí chybou KeyError.
get vrátí náhradní hodnotu místo chyby, items() dává dvojice pro cyklus.Kuchař má šuplíky na příbory, kořenky se jmény a misku na zbytky. Každá nádoba se hodí na něco jiného. V Pythonu jsou čtyři základní „nádoby“ na data a dobrý programátor ví, kterou kdy vzít.
Tady porovnáš seznam, n-tici, slovník a množinu. Hlavně se naučíš množiny a jejich operace, které znáš z matematiky.
{ }. Hledá se podle klíče, klíče se neopakují.{"CZ": "Praha", "SK": "Bratislava"}{ } bez opakování a bez pořadí. Nemá indexy. Prázdná množina je set(), protože {} je prázdný slovník.set("banan") je {'b', 'a', 'n'} (pořadí může být jiné).bod = (3, 4)| Struktura | Zápis | Pořadí | Opakování | Měnitelná | Hledání |
|---|---|---|---|---|---|
| seznam | [1, 2] | ano | ano | ano | podle indexu |
| n-tice | (1, 2) | ano | ano | ne | podle indexu |
| slovník | {"a": 1} | pořadí vložení | klíče ne | ano | podle klíče |
| množina | {1, 2} | ne | ne | ano | jen „je tam?“ |
Pro a = {1, 2, 3} a b = {2, 3, 4}:
| Operace | Zápis | Výsledek |
|---|---|---|
| sjednocení (vše z obou) | a | b | {1, 2, 3, 4} |
| průnik (v obou) | a & b | {2, 3} |
| rozdíl (v a, ne v b) | a - b | {1} |
| symetrický rozdíl (jen v jedné) | a ^ b | {1, 4} |
[1, 1, 2, 2, 3]?len(set([1, 1, 2, 2, 3])). Množina zahodí opakování: {1, 2, 3}, tedy 3.eva & petr = {"M", "IT"}.Roztřiď úlohy podle toho, která struktura se na ně hodí nejlépe.
prazdna = {} vytvoří prázdnou množinu.prazdna = set()Složené závorky bez obsahu znamenají prázdný slovník, protože slovník byl v Pythonu dřív.
|, průnik & a rozdíl -.