← Lekcje
Python · lekcja 14

Słowniki: klucz i wartość

  1. Po co słownik, skoro mamy listy
  2. Tworzenie, odczyt, dodanie i usunięcie pary
  3. Brak klucza: KeyError oraz metoda get
  4. Pętla po słowniku i program, który liczy powtórzenia
Rozgrzewka · 3 minuty

Co pamiętacie z lekcji 13?

  1. Co robi słowo import na początku programu?
  2. Co wypisze print(math.sqrt(16))?
  3. Czym różni się random.randint(1, 6) od random.choice?
Część 1 · Po co słownik

Lista pamięta kolejność, słownik pamięta nazwy

W liście każdą wartość znajdujecie po numerze, czyli indeksie. W słowniku znajdujecie ją po kluczu, czyli po nazwie, którą sami wymyślacie. Słownik to zbiór par klucz: wartość, a klucze w jednym słowniku nie mogą się powtarzać.

Lista: szukasz po numerze grades = [4, 5, 3] 0 1 2 4 5 3 Słownik: szukasz po nazwie grades = {"Ola": 4, "Jan": 5, "Ewa": 3} "Ola" "Jan" "Ewa" 4 5 3

Zapisy grades[1] i grades["Jan"] dają tę samą piątkę, ale tylko drugi zapis mówi, czyja ona jest.

docs.python.org, The Python Tutorial, rozdz. 5.5 (Dictionaries)
Część 1 · Tworzenie i odczyt

Klamry, dwukropek i przecinek

prices = {"chleb": 4.50,
          "mleko": 3.20,
          "masło": 8.99}

print(prices)
print(prices["mleko"])
print(len(prices))
{'chleb': 4.5, 'mleko': 3.2,
 'masło': 8.99}
3.2
3
  • Klamry { } otwierają słownik, dwukropek dzieli klucz od wartości, przecinek dzieli pary.
  • prices["mleko"] to odczyt: podajesz klucz, dostajesz wartość.
  • len podaje liczbę par, tu 3.
docs.python.org, The Python Tutorial, rozdz. 5.5 (Dictionaries)
Część 2 · Dodanie, zmiana, usunięcie

Ten sam zapis dodaje i zmienia

prices["jajka"] = 12.00
prices["mleko"] = 3.50
del prices["chleb"]

print(prices)
print("masło" in prices)
print("ser" in prices)
{'mleko': 3.5, 'masło': 8.99,
 'jajka': 12.0}
True
False
  • Klucza nie było, więc "jajka" zostały dodane.
  • Klucz był, więc cena mleka została zmieniona, stara przepada.
  • del usuwa parę, in sprawdza klucz.

Skąd nazwa: w innych językach ten sam pojemnik nazywa się tablicą asocjacyjną, czyli skojarzeniową, bo kojarzy nazwę z wartością.

docs.python.org, The Python Tutorial, rozdz. 5.5 (Dictionaries)
Część 2 · Gdy klucza nie ma

Nawias kwadratowy krzyczy, get odpowiada spokojnie

Nawias: błąd i koniec print(prices["ser"]) klucza "ser" nie ma KeyError: 'ser' get: program idzie dalej print(prices.get("ser")) None print(prices.get("ser", 0)) 0

Metoda get oddaje None, czyli „nic”, gdy klucza nie ma. Drugi argument to wartość zastępcza: get("ser", 0) odda zero.

docs.python.org, The Python Tutorial, rozdz. 5.5 (Dictionaries)
Część 3 · Pętla po słowniku

Sam klucz albo klucz z wartością

for product in prices:
    print(product)
mleko
masło
jajka
for product, price in prices.items():
    print(product, "kosztuje", price, "zł")
mleko kosztuje 3.5 zł
masło kosztuje 8.99 zł
jajka kosztuje 12.0 zł

Metoda items oddaje pary, dlatego po for stoją dwie nazwy naraz: pierwsza bierze klucz, druga wartość.

docs.python.org, The Python Tutorial, rozdz. 5.6 (Looping Techniques)
Część 3 · Licznik powtórzeń

Sześć wyrazów, trzy liczniki

words = ["kot", "pies", "kot",
         "mysz", "kot", "pies"]

counter = {}
for word in words:
    counter[word] = counter.get(word, 0) + 1

print(counter)
{'kot': 3, 'pies': 2,
 'mysz': 1}
  • Klucz to wyraz, wartość to liczba jego wystąpień.
  • get(word, 0) daje dotychczasowy licznik, a przy pierwszym spotkaniu zero.
docs.python.org, The Python Tutorial, rozdz. 5.5 (Dictionaries)
Ćwiczenie · przy komputerze · 12 minut

Ćwiczenie: stolice i oceny

  1. Utwórz słownik capitals z trzema krajami i ich stolicami. Wypisz stolicę Polski, dodaj parę Francja i Paryż, na końcu wypisz liczbę par.
  2. Sprawdź operatorem in, czy w słowniku są Czechy. Potem spróbuj odczytać Hiszpanię przez get: raz bez drugiego argumentu, raz z napisem „nie znam”.
  3. Dla listy grades = [5, 4, 5, 3, 4, 5] policz słownikiem, ile razy pojawiła się każda ocena. Wypisz wynik pętlą po items w postaci „Ocena 5 wystąpiła 3 razy”.
Jak sprawdzić, czy wynik jest dobry

Sumy z zadania 3 muszą dać 6, bo tyle ocen jest na liście. Gdy w zadaniu 1 wyjdzie KeyError, sprawdź pisownię klucza: "Polska" i "polska" to dwa różne klucze.

Sprawdzenie

Trzy pytania na koniec

  1. Czym różni się szukanie wartości w liście od szukania w słowniku?
  2. Klucza "ser" nie ma w słowniku. Co zrobi prices["ser"], a co prices.get("ser")?
  3. Po co w pętli używa się items, skoro for działa też bez tego?
Podsumowanie

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
Para klucz i wartośćDane z formularza na stronie lecą do programu jako pary: pole „email” i to, co ktoś wpisałcodziennie
counter.get(word, 0) + 1Zliczanie, ile razy otwarto każdą podstronę sklepu w ciągu dobycodziennie
get z wartością zastępcząUstawienia użytkownika: gdy ktoś nigdy nie wybrał języka, program bierze wartość domyślną zamiast się wywalićstandard w firmach
Słownik jako całośćFormat JSON, którym strony i aplikacje wymieniają dane przez internet, to dokładnie pary klucz i wartośćstandard w firmach