Python/Kenjiro995/Slovník
Definice slovníku
[editovat]Slovník (dictionary, dict) udává mapování klíčů na hodnoty. Můžeme si třeba pamatovat počty kusů ovoce na skladě. Slovník vytváříme v Pythonu pomocí složených závorek. Podobu klíče si tedy můžeme zvlit sami a nachází se před dvojtečkou. Za dvojtečkou se nachází hodnota pložky.
slovnik = {"klíč":"hodnota"}
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
car = {"brand": "Ford", "model": "Mustang","year": 1964}
slovnik1 = {1: 'jedna', 2: 'dva', 3: 'tri'}
prazdny_slovnik = {}
prazdny_slovnik = dict()
Přístup k položkám
[editovat]K položkám slovníku přistupujeme pomocí klíče hranatými závorkami.
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
print(ovoce)
Výstup:
{'jablka': 5, 'banány': 10, 'pomeranče': 2}
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
x = ovoce["banány"]
print(x)
Výstup:
10
car = {"brand": "Ford", "model": "Mustang","year": 1964}
x = car["model"]
print(x)
Výstup:
Mustang
car = {"brand": "Ford", "model": "Mustang","year": 1964}
print(car["model"])
print(car["year"])
Výstup: Mustang 1964
Pokud se pokusíme přistoupit k položce, která ve slovníku není, dostaneme chybu. Bezpečný přístup provedeme pomocí get() ve formátu get(klíč, kdyzChyba):
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
print(ovoce.get("kiwi",0))
print(ovoce.get("kiwi", "tohle ve slovníku chybí"))
Výstup: 0 tohle ve slovníku chybí
Změna hodnoty slovníku
[editovat]ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
ovoce["jablka"] = 245
print(ovoce)
Výstup:
{'jablka': 245, 'banány': 10, 'pomeranče': 2}
Metody slovníku
[editovat]len()
[editovat]Vrátí velikost slovníku (počet položek):
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
print(len(ovoce))
Výstup:
3
keys()
[editovat]ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
print(ovoce.keys()) # vrátí seznam všech klíčů
Výstup:
dict_keys(['jablka', 'banány', 'pomeranče'])
values()
[editovat]ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
print(ovoce.values()) # vrátí seznam všech hodnot
Výstup:
dict_values([5, 10, 2])
items()
[editovat]ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
print(ovoce.items()) # vrátí seznam dvojice klíče a hodnoty
Výstup:
dict_items([('jablka', 5), ('banány', 10), ('pomeranče', 2)])
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
seznam = list(ovoce.items())
print(seznam)
Výstup:
[('jablka', 5), ('banány', 10), ('pomeranče', 2)]
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
mnozina = set(ovoce.items())
print(mnozina)
Výstup:
{('jablka', 5), ('banány', 10), ('pomeranče', 2)}
Test na přítomnost ve slovníku
[editovat]Testuje zda se daný klíč ve slovníku nachází. Pokud se nachází tak vrátí True, jinak vrátí False.
ovoce = {"jablka": 5, "banány": 10, "pomeranče": 2}
print("kiwi" in ovoce)
print("jablka" in ovoce)
Výstup:
False True
Generování slovníku
[editovat]slovnik = {x: x**2 for x in range(5)}
print(slovnik)
Výstup:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Zipování slovníku
[editovat]Vytvoření slovníku ze dvou seznamů pomocí funkce zip().
keys = ['jablka', 'hrušky', 'melouny']
vals = [10, 21, 390]
ovoce = {keys:vals for (keys,vals) in zip(keys, vals)}
print(ovoce)
Výstup:
{'jablka': 10, 'hrušky': 21, 'melouny': 390}
Pro pokročilé
[editovat]Analýza četnosti
[editovat]Pomocí slovníku vytvoříme seznam výskytů znaků elegantním způsobem:
letter_counts = {}
for letter in "Mississippi":
letter_counts[letter] = letter_counts.get (letter, 0) + 1
print(letter_counts)
Výstup:
{'M': 1, 'i': 4, 's': 4, 'p': 2}
letter_counts = {}
for letter in "Pomocí slovníku vytvoříme seznam výskytů znaků elegantním způsobem.":
letter_counts[letter] = letter_counts.get (letter, 0) + 1
print(letter_counts)
Výstup:
{'P': 1, 'o': 5, 'm': 5, 'c': 1, 'í': 4, ' ': 7, 's': 4, 'l': 2, 'v': 4, 'n': 5, 'k': 3, 'u': 1, 'y': 2, 't': 3, 'ř': 1, 'e': 5, 'z': 3, 'a': 3, 'ý': 1, 'ů': 3, 'g': 1, 'p': 1, 'b': 1, '.': 1}
Nebo může počítat četnost položek v seznamu:
letter_counts = {}
for letter in ["ahoj", "Python", "Jablka", "ahoj"]:
letter_counts[letter] = letter_counts.get (letter, 0) + 1
print(letter_counts)
Výstup:
{'ahoj': 2, 'Python': 1, 'Jablka': 1}
Tuto variantu lze rozšířit o analýzu výskytu slov z řetězce. Z tohoto důvodu je nejdříve nutné text rozsekat na seznam slov. To dělá funkce split(). Ovšem pozor takto rozseká text podle mezer, takže na konci vyjde položka "způsobem." s tečkou. Takže "způsobem" a "způsobem." jsou dvě rozdílné hodnoty.
text = "Dalším způsobem pomocí slovníku vytvoříme seznam výskytů znaků elegantním způsobem."
seznam = text.split()
letter_counts = {}
for letter in seznam:
letter_counts[letter] = letter_counts.get (letter, 0) + 1
print(letter_counts)
Výstup:
{'Dalším': 1, 'způsobem': 1, 'pomocí': 1, 'slovníku': 1, 'vytvoříme': 1, 'seznam': 1, 'výskytů': 1, 'znaků': 1, 'elegantním': 1, 'způsobem.': 1}