Chybějící klíče

Když přečtete klíč, který ve slovníku není, program skončí chybou KeyError. Pokud si nejste jistí, že tam klíč je, máte dvě možnosti, jak se chybě vyhnout.

První je zeptat se pomocí in, které znáte ze seznamů. U slovníku se in dívá na klíče a výsledek je True nebo False:

kontakt = {"jmeno": "Tom", "email": "tom@example.com"}

print("email" in kontakt)
print("telefon" in kontakt)
print("Tom" in kontakt)
True
False
False

Na posledním řádku je False, přestože Tom ve slovníku je: "Tom" je hodnota, ne klíč, a in se dívá jen na klíče. S příkazem if pak klíč přečtete jen tehdy, když tam je:

kontakt = {"jmeno": "Tom", "email": "tom@example.com"}

if "telefon" in kontakt:
    print("Telefon:", kontakt["telefon"])
else:
    print("Tom nemá telefonní číslo.")
Tom nemá telefonní číslo.

Druhou možností je metoda .get(). Čte hodnotu stejně jako hranaté závorky, ale když klíč ve slovníku není, program chybou neskončí: .get() vrátí None, hodnotu, která znamená „nic“ a kterou znáte z funkcí bez return. Jako druhý argument můžete zadat výchozí hodnotu, kterou si sami vyberete. Tu pak .get() vrátí místo None:

kontakt = {"jmeno": "Tom", "email": "tom@example.com"}

print(kontakt.get("email"))
print(kontakt.get("telefon"))
print(kontakt.get("telefon", "neznámý"))
tom@example.com
None
neznámý

.get() jen čte: klíč "telefon" do slovníku nepřidá.

Klíč v hranatých závorkách (nebo v .get()) nemusíte psát přímo jako text v uvozovkách. Může být i uložený v proměnné. To se hodí, když klíč při psaní programu neznáte, třeba v cyklu:

menu = {"káva": 45, "čaj": 35}

polozka = "čaj"
print(menu[polozka])
35

Python se podívá do proměnné polozka, najde v ní text "čaj" a přečte hodnotu s tímto klíčem. Pozor na uvozovky: menu["polozka"] hledá klíč, který je doslova "polozka", a ten tam není.

Pokyny

Kavárna džus neprodává, a proto program skončí chybou KeyError: 'džus'. Opravte to pomocí if a in: když objednávka v menu je, vypište její cenu jako dosud; když není, vypište Bohužel nemáme džus. (s názvem objednávky). Výpis by měl mít tři řádky: čaj stojí 35, Bohužel nemáme džus. a dort stojí 60.

Pod cyklem sečtěte ve druhém cyklu ceny všech objednávek a vypište Celkem: 95. Každou cenu přečtěte pomocí .get() s výchozí hodnotou 0, aby džus nic nepřičetl.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

4/9