Python

Obsah


1. Vynechání části kódu

1. 1. Vynechání větší části kódu – ”’

x = 5

'''
x = 10
x = 50
x = 500
'''

print(x)

Dojde k vynechání úseku kódu mezi prvním ”’ a druhým. Obdobně fungují i tři uvozovky (“””). Výsledek je tedy 5, přepsání proměnné bylo vynecháno.

5

1. 2. Komentáře – #

# toto je první komentář
SPAM = 1                 # a toto je druhý komentář
                         # ... a nyní třetí!
print('# Toto není komentář.')

Komentář uložený v kódu. Za (#) hashtagem [levý alt + x] dojde k vynechání kódu na daném řádku. Pro delší text je vhodnější použít tří uvozovek.

# Toto není komentář.

2. Proměnné (variables)

Proměnné jsou ‘krabice’ na ukládání dat. Python nemá píkaz pro deklaraci proměnných, proměnná je jednodušše vytvořena v moment, kdy se za ní dosadí nějaké hodnta.

2. 1. Definování proměnné

x = 5
y = "John"
print(x)
print(y)

2. 2. Datové typy proměnných

Proměnné není třeba definovat žádný datový typ. Ten se navíc dá jednoduše změnit přepsáním původních dat.

x = 4 # x je těď typ int
x = "Sally" # x je teď typ str
print(x)

Proměnná s datovým typem string se píše buďto s uvozovkami (“) nebo apostrofem (‘).

x = "John"
# je stejné jako
x = 'John'

2. 3. Názvy proměnných

Proměnné mohou mít krátké názvy (x nebo y) ale i více popisné názvy (stari, pocet_deti, jmeno). Je tu ale pár omezení:

  • proměnná musí začínat písmenem nebo podtržítkem
  • proměnná nemůže začínat číslem
  • proměnná může obsahovat pouze čísla, písmena a podtržítka (A-z, 0-9, a _ )
  • u jména proměnných záleží na velkých písmenech
    • age, Age a AGE jsou tři různé proměnné

3. Datové typy

Datový typ není nutné předem definovat, stačí jen zapsat hodnotu. Pokud ale chceme jasně definovat typ, používá se formulace dle tabulky.

3. 1. Nadefinování datového typu – type(x)

Datový typPříkladNadefinování typu
string x = “Hello World” x = str(“Hello World”)
intiger x = 20 x = int(20)
float x = 20.5 x = float(20.5)
boolx = True x = bool(5)

3. 2. Zjištění datového typu – print(type(x))

descislo = 2.2
print(type(descislo))

Dojde k navrácení datového typu proměnné.

<class 'float'>

3. 3. Ověření datového typu – isinstance()

Jedná se o funkci, která vrací True pokud je objekt daného typu. Pokud není, vrací False.

#Použití pro jednu hodnotu
print(isinstance(5, int))

#Použití s proměnnou
t = isinstance("slovo", int)
print(t)

#Vrací TRUE, pokud je proměnná jedním z typů
k = isinstance("Hello", (float, int, str, tuple, dict))
print(k)
True
False
True

3. 4. Číselné datové typy

  • Python obsahuje 2 základní číselné datové typy
    • intiger – int
      • x = 1
    • float
      • y = 2.8

3. 4. 1. Intiger

Je celé číslo, kladné i záporné, bez desetinných míst, s neomezenou délkou.

x = 1
y = 3565622255488771121225845121564584321369784386000454422
z = -3255522

3. 4. 2. Float

Float je kladné nebo záporné číslo, které obsahuje jedno nebo více desetinných míst.

x = 1.10
y = 1.0
z = -35.59

3. 4. 3. Náhodná čísla – random

Python umožňuje vytvářet náhodná čísla, je k tomu ovšem potřeba nahrát vestavěný modul random. Více zde

import random

#Vypíše náhodné číslo mezi 1 až 9
print(random.randrange(1, 10)) 

#Vypíše náhodné číslo float mezi 0 a 1
print(random.random())

3. 5. Textové datové typy

Python obsahuje pouze datový typ string, zkráceně str.

3. 5. 1. String

String je v pythonu ohraničena uvozovkami “slovo” nebo apostrofy ‘slovo’. Oba zápisy jsou si ekvivalentní.

a = "slovo"
b = 'další slovo'
3. 5. 1. 1. String na více řádků

Pro napsání textu na více řádků lze použít ohraničení třemi uvozovkami (jako pro vynechání kódu) u proměnné.

a = """Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua."""
print(a)
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.
3. 5. 1. 2. Písmeno na pozici…

Zjišťování, které písmeno je na první pozici (pozor na python číslování od 0)

a = "Hello, World!"
print(a[1])
e

Zjišťování, které písmeno je na pozici v intervalu:

a = "Hello, World!"
print(a[2:5])

b = "Hello, World!"
print(b[-5:-2])
llo
orl
3. 5. 1. 3. Délka textu – len

Pro zjištění délky textu slouží funkce len(). Počítají se všechny znaky mezi první a poslední uvozovkou, tedy i čárky, mezery a pod.

a = "Hello, World!"
print(len(a))
13
3. 5. 1. 4. Malá/velká písmena – lower/upper

Funkce přepisující text na malá/velká písmena.

a = "Hello, World!"
print(a.lower())

a = "Hello, World!"
print(a.upper())
hello, world!
HELLO, WORLD!
3. 5. 1. 5. Přepsání části textu – replace

Přepíše písmeno nebo část textu. Pozor na rozlišení malých/velkých písmen. Viz příklad

a = "Hello, World!"
print(a.replace("H", "J")) #s jedním unikátním znakem
print(a.replace("Hel", "J")) #část textu za jedno písmeno
print(a.replace("L", "J")) #velké písmeno v textu není, nestane se nic
print(a.replace("l", "J")) #přepíše každé takové písmeno v textu
Jello, World!
Jlo, World!
Hello, World!
HeJJo, WorJd!
3. 5. 1. 6. Vynechání mezer před a za textem – strip

Vynechá přebytečné mezery před a za textem, mezery mezi slovy ale zůstanou.

a = " Hello, World! "
print(a.strip())

a = " Hello, World!  "
print(a.strip().upper()) #v kombinaci s další funkcí
Hello, World!
HELLO, WORLD!
3. 5. 1. 7. Zjištění zdali obsahuje… – in/not in

Pro zjištění, zdali proměnná obsahuje část textu se používají in/not in

txt = "The rain in Spain stays mainly in the plain"
x = "ain" in txt
print(x)

txt = "The rain in Spain stays mainly in the plain"
x = "ain" not in txt
print(x)
True
False
3. 5. 1. 8. Napojování string na jiný string

Spojení dvou proměnných se dá udělat jako v matematice pomocí znaménka +

a = "Hello"
b = "World"
c = a + b #propojí pouze slova, mezeru je třeba přidat jinak
print(c) 

d = a + " " + b #s přidáním mezery
print(d)
HelloWorld
Hello World
3. 5. 1. 9. Escape characters

Některé znaky není možné ve string formátu použít, abychom je byli schopni použít, musíme využít tzv. escape characters. Tyto escape characters obsahují znak obráceného lomítka \ a za ním znak, který chceme použít. Příkladem takového znaku, který by jinak nešel použít je uvozovka.

KódVýsledek
\’ apostrof
\”uvozovky
\\ lomítko
\n nový řádek
\t tabulátor
\b backspace
txt = "We are the so-called \"Vikings\" from the north."
txt2 = "We are the so-called \'Vikings\' from the north."
txt3 = "\\" #vloží pouze jednu \
txt4 = "první řádek\ndruhý řádek"
txt5 = "Hello \bWorld!" #vymaže znak před \b
txt6 = "Hello\tWorld!" 
print(txt)
print(txt2)
print(txt3)
print(txt4)
print(txt5)
print(txt6)
We are the so-called "Vikings" from the north.
We are the so-called 'Vikings' from the north.
\
první řádek
druhý řádek
HelloWorld!
Hello	World!

3. 6. Datový typ Boolean

Boolean reprezentuje dvě hodnoty: true a false. Používají se při porovnávání nebo if…else funkci. Stejně dotazování se na hodnoty je zpravidla True. Pouze číslo 0 a prázdné listy, tuply, sety a slovníky a samotné False nebo None vrací False.

print(10 > 9)
print(10 == 9)
print(10 < 9)
x = "Hello"
y = 0
f = False
z = None
print(bool(x))
print(bool(y))
print(bool(f))
print(bool(z))
True
False
False
True
False
False
False

3. 6. 1. Aritmetické operátory

Operátory sloužící k práci s čísly.

OperátorNázevPříklad
+součetx + y
odečítáníx – y
*násobeníx * y
/děleníx / y
%zbytek po děleníx % y
**exponenciálx ** y
//dělení beze zbytkux // y
x = 5
y = 3
print(x + y, x - y, x * y, x / y, x % y, x ** y, x // y)
8 2 15 1.6666666666666667 2 125 1

3. 6. 2. Přiřazovací operátory

Přiřazují hodnoty za proměnné.

OperátorPříkladVýznam
=x = 5x = 5
+=x += 3x = x + 3
-=x -= 3 x = x – 3
*=x *= 3x = x * 3
/=x /= 3x = x / 3
%=x %= 3 x = x % 3
//= x //= 3 x = x // 3
**= x **= 3 x = x ** 3
x = 5
print(x)
x += 3
print(x)
x -= 3
print(x)
x *= 3
print(x)
x /= 3
print(x)
x %= 3
print(x)
x //= 3
print(x)
x = 5 #x je z předchozí operace 0
x **= 3
print(x)
5
8
5
15
5.0
2.0
0.0
125

(!!) Tyto funkce přiřazují za proměnnou, proto se v příkladě pokaždé vychází z předchozí hodnoty, která se každou operací mění.

3. 6. 3. Srovnávací operátory

Tyto operátory srovnávají dvě hodnoty, přitom vracejí boolovské hodnoty. Při srovnávání proměnných nedochází ke změně hodnot dané proměnné.

(!!) Pozor, x = y není x == y!!
x = y přiřadí proměnné x hodnotu proměnné y
x == y ověří, zdali x a y mají stejnou hodnotu

OperátorNázevPřklad
==rovnox == y
!=není rovnox != y
> větší nežx > y
< menší nežx < y
>= větší nebo rovnox >= y
<= menší nebo rovnox <= y
x = 5
y = 3
print(x == y, x != y, x > y, x < y, x >= y, x <= y)
False True True False True False

3. 7. Seznam (list)

Seznam je uspořádaný a měnitelný. V pythonu se zapisuje hranatými závorkami [ ] (pravý alt + f, pravý alt + g). Vytvoření seznamu je zcela jednoduché:

seznam = [12, 30, 5, 'slovo']
print(seznam)
[12, 30, 5, 'slovo']

Stejného výsledku lze dosáhnout i funkcí list(). Pozor na zdvojené závorky.

seznam1 = list((12, 30, 5, 'slovo'))
print(seznam1)
[12, 30, 5, 'slovo']

3. 7. 1. Získávání hodnot indeováním

Python umožňuje vyhledávat hodnoty ze seznamu za pomoci jejich indexů, a to i záporných. Index [-1] proto najde poslední hodnotu v seznamu.

seznam = [12, 30, 5, 'slovo', "něco", 35]
print(seznam[1])
print(seznam[-1])
30
35

(!!) Pozor na číslování pythonu!
První hodnota v seznamu má index 0

Je možné vyhledávat i pomocí intervalu indexů a to opět v kladných i záporních. První hodnota indexu je započtena, ale poslední už ne(!).

seznam = [12, 30, 5, 'slovo', "něco", 35]
print(seznam[2:5]) 
    #hodnota s indexem 2 - číslo 5 je vrácena
    #hodnota s indexem 5 - číslo 35 již ne
print(seznam[-5:-2])
[5, 'slovo', 'něco']
[30, 5, 'slovo']

3. 7. 2. Změna hodnot v seznamu

Změnu určité hodnoty v seznamu lze udělat pomocí jejího indexu.

#nahrazení hodnoty 30 hodnotou "ahoj"
seznam = [12, 30, 5, 'slovo', "něco", 35]
seznam[1] = "ahoj"
print(seznam)
[12, 'ahoj', 5, 'slovo', 'něco', 35]

3. 7. 3. Vypsání hodnot ze seznamu cyklem

Cyklus v seznamu, více v kapitole o cyklech. Dojde k vypsání všech hodnot seznamu.

seznam = [12, 30, 5, 'slovo']
for x in seznam:
  print(x)
12
30
5
slovo

3. 7. 4. Kontrola, jestli seznam obsahuje…

Pro zjištění, jestli se určitá hodnota nachází v seznamu, použijeme in.

seznam = [12, 30, 5, 'slovo']
if "slovo" in seznam:
    print("yes!")
yes!

3. 7. 5. Velikost seznamu

Délku seznamu lze zjistit stejně jako délku stringu pomocí funkce len(). Funkce navrátí počet věcí v seznamu

seznam = [12, 30, 5, 'slovo']
print(len(seznam))
4

3. 7. 6. Přidávání do seznamu

Pro přidávání do seznamu se používá funkce append().

seznam = [12, 30, 5, 'slovo']
seznam.append(15)          #přidá hodnotu 15
print(seznam)
[12, 30, 5, 'slovo', 15]

Chceme-li přidat na konkrétní místo v seznamu, použijeme funci index().

seznam = [12, 30, 5, 'slovo']
seznam.insert(0, 15)   #0 je index, 15 je hodnota kterou přidáváme
print(seznam)
[15, 12, 30, 5, 'slovo']

3. 7. 7. Mazání ze seznamu

Pro mazání ze seznamu je tu hned několik metod.

3. 7. 7. 1. Smazání konkrétní hodnoty

Pokud známe hodnotu, kterou chceme smazat, použijeme funkci remove().

seznam = [12, 30, 5, 'slovo']

seznam.remove('slovo')
print(seznam)
[12, 30, 5]
3. 7. 7. 2. Mazání dle indexu

Funkce pop() smaže konkrétní index nebo poslední hodnotu, pokud není index specifikován.

seznam = [12, 30, 5, 'slovo']
seznam.pop()     #bez speficikace indexu smaže poslední hodnotu
print(seznam)

seznam = [12, 30, 5, 'slovo']
seznam.pop(1)    #smaže hodnotu s indexem 1
print(seznam)
[12, 30, 5]
[12, 5, 'slovo']

Obdobně i funkce del smaže hodnotu s daným indexem. Bez specifikace indexu smaže celý seznam.

seznam = [12, 30, 5, 'slovo']
del seznam     
#vymaže celý seznam, print(seznam) by vyhodilo error

seznam = [12, 30, 5, 'slovo']
del seznam[1]
print(seznam)
[12, 5, 'slovo']

Pro vymazání všech hodnot seznamu slouží funkce clear(). Narozdíl od předchozí del nesmaže celý seznam, pouze hodnoty v něm.

seznam = [12, 30, 5, 'slovo']
seznam.clear()
print(seznam)
[]
3. 7. 7. 3. Kopírování seznamu

Seznam nelze jedonušše zkopírovat napsáním seznam1 = seznam2, protože tím by seznam2 pouze odkazoval na seznam1 a jakákoliv změna v seznam1 by se tudíž projevila i v seznam2.

Proto používáme funkci copy().

seznam1 = [12, 30, 5, 'slovo']
seznam2 = seznam1.copy()
print(seznam2)
[12, 30, 5, 'slovo']

3. 7. 8. Spojení více seznamů

Existuje vícero metod jak propojit seznamy. Nejjednodušší je použít operátor +. Díky tomu dojde k vytvoření nového seznamu s požadovanými hodnotami.

seznam1 = [12, 30, 5, 'slovo']
seznam2 = ["slovo2", 100, 50.4]
seznam3 = seznam1 + seznam2
print(seznam3)
[12, 30, 5, 'slovo', 'slovo2', 100, 50.4]

Další možností je rozšíření sezamu pomocí funkce append() a cyklu. Není třeba vytvářet nový seznam, dojde k rozšíření existujícího.

seznam1 = [12, 30, 5, 'slovo']
seznam2 = ["slovo2", 100, 50.4]

for x in seznam2:
    seznam1.append(x)

print(seznam1)
[12, 30, 5, 'slovo', 'slovo2', 100, 50.4]

Další možností je použití funkce extend(), která přidá seznam2 na konec seznamu1.

seznam1 = [12, 30, 5, 'slovo']
seznam2 = ["slovo2", 100, 50.4]

seznam1.extend(seznam2)

print(seznam1)
[12, 30, 5, 'slovo', 'slovo2', 100, 50.4]

3. 8. Tuple

Tuple je uspořádáný a neměnný. V pythonu se píše se závorkami ().

tupl1 = ("banán", "jabko", 33)
print(tupl1)
('banán', 'jabko', 33)

Tuple lze vytvořit také funkcí tuple(). Pozor na zdvojené závorky.

tupl1 = tuple(("jabko", "banán", 33))
print(tupl1)
('jabko', 'banán', 33)

3. 8. 1. Získávání hodnot indexováním

Stejně jako u seznamu lze hodnoty získat indexováním. Stejně jako u seznamu lze používat i záporných indexů, kdy index [-1] odkazuje na poslední hodnotu. Index [0] vzhledem k číslování v pythonu oskazuje na první hodnotu.

tupl1 = ("banán", "jabko", 33, "mrkev", 78.7)
print(tupl1[1])
print(tupl1[-1])
jabko
78.7

Je možné vyhledávat i pomocí intervalu indexů a to opět v kladných i záporních. První hodnota indexu je započtena, ale poslední už ne(!).

tupl1 = ("banán", "jabko", 33, "mrkev", 78.7)
print(tupl1[1:3])
print(tupl1[-3:-1])
('jabko', 33)
(33, 'mrkev')

3. 8. 2. Změna hodnot v tuple

Jakmile je tuple vytvořen, nelze jeho hodnoty měnit (!!). Jak bylo zmíněno, tuply jsou neměnné.

Existuje ale možnost, jak je přeci jen změnit. Tuple lze změnit na seznam, v něm změnit hodnoty jako v každém jiném seznamu a následně z něj udělat opět tuple.

tupl = ("banán", "jabko", "mrkev")
seznam = list(tupl)
seznam[1] = "kiwi"
tupl = tuple(seznam)

print(tupl)
('banán', 'kiwi', 'mrkev')

3. 8. 3. Vyhledání hodnot tuple cyklem

Cyklus v tuple, více v kapitole o cyklech. Dojde k vypsání všech hodnot tuple.

tupl = ("banán", "jabko", "mrkev")
for y in tupl:
    print(y)
banán
jabko
mrkev

3. 8. 4. Kontrola, zdali tuple obsahuje…

Pro zjištění, jestli se určitá hodnota nachází v tuple, použijeme in.

tupl = ("banán", "jabko", "mrkev")
if "mrkev" in tupl:
    print("ano")
ano

3. 8. 5. Velikost tuple

Délku tuple lze zjistit stejně jako délku seznamu pomocí funkce len(). Funkce navrátí počet věcí v tuple.

tupl = ("banán", "jabko", "mrkev")
print(len(tupl))
3

3. 8. 6. Přidávání do tuple

Tuple je neměnný a proto do něj nelze ani přidávat hodnoty. Stejně jako u kapitoly o změně hodnot v tuple, lze jej přeměnit na seznam a ten doplnit.

tupl = ("banán", "jabko", "mrkev")
seznam = list(tupl)
seznam.append("kiwi")
tupl = tuple(seznam)

print(tupl)
('banán', 'jabko', 'mrkev', 'kiwi')

3. 8. 7. Vytvoření tuple s jednnou hodnotou

Pokud je v tuple jen jedna hodntoa, jeza ni třeba dodat čárku, jinak python nerozezná že se jedná o tuple a bude jej považovat za pronměnnou.

tupl1 = ("jabko",)
print(type(tupl1))

#není tupl
tupl2 = ("banán")
print(type(tupl2))
<class 'tuple'>
<class 'str'>

3. 8. 8. Mazání z tuple

Vzhledem k tomu, že je tuple neměnný, nelze z něj mazat. Jedinnou možností je převést tuple na seznam (viz v kapitole o změně hodnot nebo o přidávání do tuple).

Tuple lze pouze smazat.

tupl1 = ("jabko", "banán", 33)
del tupl1

3. 8. 9. Spojení tuplů

Tuply jsou neměnné, proto pro spojení existujících tuple musíme vytvořit nový tuple. A nebo opět převést tuple na seznam.

tupl1 = ("jabko", "banán", 33)
tupl2 = ("kiwi", "soja")
tupl3 = tupl1 + tupl2
print(tupl3)
('jabko', 'banán', 33, 'kiwi', 'soja')

3. 9. Sety

Set je neuspořádaný a bez indexace. V pythonu se sety píší se složenými závorkami { } ( (pravý ALT + B, pravý ALT + N).

set1 = {"apple", "banana", "cherry"}
print(set1) 
{'cherry', 'apple', 'banana'}

Pozor (!!) Sety jsou neuspořádané a proto není jisté, v jakém pořadí se hodnoty vypíší.

Stejně tak lze set vytvořit pomocí set().

#používají se zdvojené závorky
set1 = set(("apple", "banana", "cherry"))
print(set1) 

3. 9. 1. Získávání hodnot

Hodnoty nelze získávat skrze indexy, je proto nutné procházet skrze for cyklus, nebo se zeptat na specifickou hodnotu, která je v setu uložena použitím in.

#cyklus skrze seznam
set1 = {"apple", "banana", "cherry"}

for x in set1:
  print(x) 
banana
cherry
apple

Dotazování na konkrétní hodnotu viz níže, výsledkem není hodnota, ale boolean.

#dotazování na konkrétní hodnotu
set1 = {"apple", "banana", "cherry"}

print("banana" in set1) 
True

3. 9. 2. Změna hodnot v setu

Jakmile je set vytvořen, jeho hodnoty nelze měnit. Jde ale přidávat, popřípadě mazat.

3. 9. 3. Přidávání hodnot

Pokud chceme přidat pouze jednu hodnotu, použijeme funkci add().

set1 = {"apple", "banana", "cherry"}
set1.add("kiwi")
print(set1)
{'apple', 'banana', 'cherry', 'kiwi'}

Pokud potřebujeme přidat více hodnot, použiejem funkci update().

set1 = {"apple", "banana", "cherry"}
set1.update(["kiwi", "orange", "třešeň"])
print(set1)
{'banana', 'kiwi', 'orange', 'cherry', 'třešeň', 'apple'}

3. 9. 4. Mazání hodnot

Pro mazání lze použít buďto remove() nebo discard(). Rozdílem mezi fukncemi je při mazání hodnot, které seznam neobsahuje.

Pokud použijeme remove() pro hodnotu která v seznamu není, python vypíše error.

set1 = {"apple", "banana", "cherry"}
set1.remove("pomeranč")
print(set1)
KeyError: 'pomeranč'

Pokud použijeme discard() na hodnotu, která v seznamu není, žádný error se nevypíše.

set1 = {"apple", "banana", "cherry"}
set1.discard("pomeranč")
print(set1)
{'cherry', 'apple', 'banana'}

Mazat se dá i pomocí pop(), které smaže poslední hodnotu v setu. Jelikož jsou sety neuspořádané, není jasné, která hodnota to bude!

set1 = {"apple", "banana", "cherry"}
x = set1.pop()
print(x)       #vypíše, která hodnota bude smazána
print(set1)
banana
{'apple', 'cherry'}

Opět lze použít clear() pro vymazání celého seznamu.

set1 = {"apple", "banana", "cherry"}
x = set1.clear()
print(set1)
set()

Funkce del pak smaže celý seznam.

set1 = {"apple", "banana", "cherry"}
del set1
print(set1)

3. 9. 5. Délka setu

Délku seznamu zjistíme stejně jako obvykle funkcí len().

set1 = {"apple", "banana", "cherry"}

print(len(set1)) 
3

3. 9. 6. Spojení více setů

Na spojení setů existují dva způsoby. Lze použít funkci union(), která vytvoří nový set obsahující hodnoty z předchozích. Druhou možností je update(), která vloží hodnoty z jednoho setu do jiného, již existujícího.

set1 = {"apple", "banana", "cherry"}
set2 = {1,2,3}
set3 = set1.union(set2)
print(set3)
{'banana', 1, 2, 3, 'apple', 'cherry'}
set1 = {"apple", "banana", "cherry"}
set2 = {1,2,3}
set1.update(set2)
print(set1)
{1, 2, 3, 'apple', 'banana', 'cherry'}

Obe mětody vynechají duplicitní hodnoty. Jiné metody, které zanechají pouze duplicitní, nebo naopak vynecahjí duplicitní, najdete zde.

3. 10. Slovník (dictionary)

Slovníky jsou neuspořádané, měnitelné a inexované. V pythonu se slovníky píší se složenými závorkami {} (pravý ALT + B, pravý ALT + N). Obsahují key a value.

slovnik = {"id": 1, "barva": "modrá", "značka": "Nissan"}
print(slovnik)
{'id': 1, 'barva': 'modrá', 'značka': 'Nissan'}

Vytvořit slovník lze i pomocí dict().

slovnik = dict(id=1, barva="modrá", značka="Nissan")
#key nejsou string
#namísto dvojtečky jsou definovány rovnítkem
print(slovnik)
{'id': 1, 'barva': 'modrá', 'značka': 'Nissan'}

3. 10. 1. Získávání hodnot ze slovníku

K hodnotám ve slovníku lze přistupovat skrze jejich klíče (key), napsaného ve hranatých závorkách.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
x = jizdnirady["misto_odj"]
Brno

Dále lze použít get(), které bude mít stejný efekt.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
y = jizdnirady.get("misto_odj")
Brno

3. 10. 2. Změna hodnot slovníku

Změnit konkrétní hodnotu slovníku lze skrze její klíč.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
jizdnirady["misto_odj"] = "Praha"
print(jizdnirady)
{'id_trasy': 1, 'misto_odj': 'Praha', 'misto_prij': 'Praha'}

3. 10. 3. Cyklus skrze slovník

Použitím for cyklu skrze slovník lze vypsat samotné hodnoty, ale i jejich klíče.

3. 10. 3. 1. Vypsání klíčů

Následujícím způsobem vypíšeme všechny klíče ze slovníku.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}

for x in jizdnirady:
    print(x)
id_trasy
misto_odj
misto_prij
3. 10. 3. 2. Vypsání hodnot

Takto lze vypsat všechny hodnoty ze slovníku.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}

for x in jizdnirady:
    print(jizdnirady[x])
1
Brno
Praha

Druhá možnost je použít values().

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}

for x in jizdnirady.values():
    print(x)
1
Brno
Praha
3. 10. 3. 3. Vypsání klíčů i hodnot

K vypsání klíčů i proměnných použijeme funkci items().

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}

for x,y in jizdnirady.items():
    print(x,y)
id_trasy 1
misto_odj Brno
misto_prij Praha

3. 10. 4. Kontrola, jestli slovník obsahuje klíč…

K zjištění, jestli slovník obsahuje daný klíč, použijeme funkci in.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}

if "misto_prij" in jizdnirady:
    print("yes")
yes

3. 10. 5. Délka slovníku

Pro zjištění, kolik klíčů slovník obsahuje použijeme funkci len().

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}

print(len(jizdnirady))
3

3. 10. 6. Přidávání do slovníku

Pro přidání do slovníku slouží nový klíč a jeho hodnota.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}

jizdnirady["zastavka"] = "Zvonařka"
print(jizdnirady)
{'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha', 'zastavka': 'Zvonařka'}

3. 10. 7. Mazání ze slovníku

Pro mazání existuje několik metod podle toho co potřebujeme smazat.

3. 10. 7. 1. Mazání klíče

Potřebujeme-li odebrat nějaký klíč, použijeme pop().

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
jizdnirady.pop("id_trasy")
print(jizdnirady)
{'misto_odj': 'Brno', 'misto_prij': 'Praha'}
3. 10. 7. 2. Mazání posledního přidaného klíče

Funkce popitem() smaže poslední přidaný klíč. Před verzí 3.7. smazalo náhodný klíč.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
jizdnirady.popitem()
print(jizdnirady)
{'id_trasy': 1, 'misto_odj': 'Brno'}
3. 10. 7. 3. Mazání hodnot dle klíče

Chceme-li smazat hodnotu dle konkrétního klíče, použijeme del. Pokud za del nic nedosadíme, můžeme smazat celý slovník.

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
del jizdnirady["id_trasy"]
#del jizdnirady      smazalo by celý slovník
print(jizdnirady)
{'misto_odj': 'Brno', 'misto_prij': 'Praha'}
3. 10. 7. 4. Vymazání slovníku

Všechny klíče i hodnoty ze slovníku smaže funkce clear().

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
jizdnirady.clear()
print(jizdnirady)
{}

3. 10. 8. Kopírování slovníků

Pro kopírování slovníků lze využít buďto funkce copy()

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
jizdnirady2 = jizdnirady.copy()
print(jizdnirady2)

nebo vytvořením nového slovníku skrze dict().

jizdnirady = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
jizdnirady2 = dict(jizdnirady)
print(jizdnirady2)

3. 10. 9. Slovníky se slovníky

Slovník může obsahovat další slovník. Takové struktuře se říká “nested dictionaries”.

jizdnirady = {
"rad1":{'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'},
"rad2":{'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'},
"rad3":{'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
}

print(jizdnirady)
{'rad1': {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}, 'rad2': {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}, 'rad3': {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}}

Pro vložení tří již existujících seznamů do seznamu uděláme následovně:

rad1 = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
rad2 = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
rad3 = {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}
jizdnirady = {
    "rad1":rad1,
    "rad2":rad2,
    "rad3":rad3
}

print(jizdnirady)
{'rad1': {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}, 'rad2': {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}, 'rad3': {'id_trasy': 1, 'misto_odj': 'Brno', 'misto_prij': 'Praha'}}