Python/Kenjiro995/Slovník

Z Wikiverzity

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}