Dictionaries – slovníky
Používají se k ukládání datových hodnot ve dvojicích klíč:hodnota.
Slovník je uspořádaná* měnitelná kolekce a nepovoluje duplicity.
Od verze Pythonu 3.7 jsou slovníky uspořádané. Ve verzích 3.6 a starších jsou neuspořádané.
Zapisují se pomocí složených závorek a obsahují klíče a hodnoty.
cz_en = {
"moře" : "sea",
"strom" : "tree",
"obloha" : "sky"
}
print(cz_en) # celý slovník
print(cz_en["strom"]) # hodnota pro klíč strom
print(len(cz_en)) # počet položek
Položky slovníku mohou mít libovolný datový typ.
osoba = {
"jméno" : "Petr",
"věk" : 1998,
"svobodný" : True ,
"koníčky" : ["hokej","videohry","turistika"]
}
print(osoba)
print(type(osoba))
print(osoba["jméno"])
print(osoba["koníčky"])
print(osoba["svobodný"])
print(osoba["věk"])
Slovník lze vytvořit pomocí konstruktoru dict()
a hodnotu dle klíče získat i metodou get()
.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
print(osoba["jmeno"])
print(osoba.get("jmeno"))
Metoda keys()
vrací seznam všech klíčů ve slovníku jako pohled na slovník. Změny ve slovníku se projeví v seznamu klíčů.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
klice = osoba.keys()
print(klice) #před
osoba["prijmeni"] = "Novák"
print(klice) #po
Metoda values()
vrácí seznam všech hodnot ve slovníku jako pohled na slovník. Změny ve slovníku se projeví v seznamu hodnot.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
hodnoty = osoba.values()
print(hodnoty) #před
osoba["prijmeni"] = "Novák"
osoba["student"] = False
print(hodnoty) #po
Metoda items()
vrácí položky slovníku jako n-tice v seznamu.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
prvky = osoba.items()
print(prvky) #před
osoba["prijmeni"] = "Novák"
osoba["student"] = False
print(prvky) #po
Chcete-li zjistit, zda klíč existuje, použijte klíčové slovo in
.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
print("vek" in osoba)
Metoda update()
aktualizuje slovník položkami z daného argumentu. Argumentem musí být slovník nebo iterovatelný objekt s páry klíč : hodnota.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
osoba.update({"jmeno" : "Eva"})
print(osoba["jmeno"])
Metoda pop()
odebere položku se zadaným názvem klíče. Metoda popitem()
odstraní poslední vloženou položku (ve verzích před 3.7 náhodnou položka). Klíčové slovo del
odstraní položku se zadaným názvem klíče nebo celý slovník. Metoda clear()
vyprázdní slovník.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
osoba.pop("student")
osoba.popitem()
osoba.clear()
del osoba["jmeno"]
del osoba
Procházení slovníkem
Pomocí smyčky for
můžete procházet slovníkem. Návratovou hodnotou jsou klíče slovníku, ale existují metody vracející hodnoty.
en_cz = dict(sea = "moře", tree = "strom",sky = "obloha")
for klic in en_cz:
print(klic)
for klic in en_cz.keys():
print(klic)
for klic in en_cz:
print(en_cz[klic])
for hodnota in en_cz.values():
print(hodnota)
for klic, hodnota in en_cz.items():
print(klic, hodnota)
Kopírování slovníku
Slovník nelze zkopírovat jednoduše zadáním dict2 = dict1
, protože dict2
bude pouze odkazem na dict1
a změny provedené v dict1
se automaticky provedou také v dict2
.
Použít můžete vestavěné metody copy()
a dict()
.
osoba = dict(jmeno = "Adam", vek = 24, student = True)
kopie1 = osoba.copy()
kopie2 = dict(osoba)
print(kopie1)
print(kopie2)
Vnořené slovníky
Slovník může obsahovat vnořené slovníky.
osoby = {
1 : {"jmeno" : "Martina",
"vek" : 36 },
2 : {"jmeno" : "Lucie",
"vek" : 28 },
3 : {"jmeno" : "Pavel",
"vek" : 21 }}
print(osoby)
# alternativní možnost:
o1 = {"jmeno" : "Martina",
"vek" : 36 }
o2 = {"jmeno" : "Lucie",
"vek" : 28 }
o3 = {"jmeno" : "Pavel",
"vek" : 21 }
studenti = { 1 : o1, 2 : o2, 3 : o3 }
print(studenti)
# přístup k položkám:
print(osoby[2]["jmeno"])
print(studenti[3]["vek"])
# procházení cyklem pomocí medody items():
for vnejsiKlic, osoba in osoby.items():
print(vnejsiKlic)
for vnitrniKlic in osoba:
print(vnitrniKlic + ':', osoba[vnitrniKlic])
metoda | popis |
---|---|
clear() | Odebere všechny prvky ze slovníku |
copy() | Vrátí kopii slovníku |
fromkeys() | Vrátí slovník se zadanými klíči a hodnotou |
get() | Vrátí hodnotu zadaného klíče |
items() | Vrátí seznam obsahující n-tici pro každý pár klíč-hodnota |
keys() | Vrátí seznam obsahující klíče slovníku |
pop() | Odebere prvek se zadaným klíčem |
popitem() | Odebere poslední vložený pár klíč–hodnota |
setdefault() | Vrátí hodnotu zadaného klíče. Pokud klíč neexistuje: vložte klíč se zadanou hodnotou |
update() | Aktualizuje slovník zadanými páry klíč–hodnota |
values() | Vrátí seznam všech hodnot ve slovníku |