Przejdź do treści
Strona główna » Python: słowniki

Python: słowniki

Czym jest słownik?

Każdy z nas zna co najmniej kilka rodzajów słowników, np. słownik ortograficzny, słownik języka polskiego, czy słownik wyrazów obcych. Jeżeli mielibyśmy określić jak skonstruowany jest słownik, to powiedzielibyśmy, że zawiera on z wpisy złożone z hasła i jego objaśnienia. Słownik w programowaniu ma bardzo podobną budowę. Formalnie mówiąc, jest to struktura danych do przechowywania par klucz-wartość.

Cechy słowników w Pythonie:

  • Są mutowalne – obiekt mutowalny w Pythonie, to taki, którego zawartość można zmienić po utworzeniu.
  • Są uporządkowane – od wersji Pythona 3.7 zachowuje się kolejność, w jakiej elementy były dodawane do słownika.
  • Unikalność kluczy – w słowniku nie może się znajdować więcej niż jeden klucz o tej samej nazwie.

Tworzenie słownika w Pythonie

Słownik w Pythonie tworzymy poprzez wymienienie par klucz-wartość (ang. key-value) w nawiasach klamrowych. Pomiędzy nimi stawiamy dwukropek, jak w przykładzie poniżej.

Python
slownik = {
  "marka": "Audi",
  "model": "A6",
  "rok": 2010
}

print("Slownik:")
print(slownik)

Wynik:

Slownik:
{'marka': 'Audi', 'model': 'A6', 'rok': 2010}

Możemy stworzyć pusty słownik, jak poniżej.

Python
pusty_slownik = {}
print("pusty slownik: ")
print(pusty_slownik)

Wynik działania programu:

pusty slownik: 
{}

Słownik także możemy stworzyć za pomocą konstruktora:

Python
slownik = dict(imie = "Jan", age = 38, kraj = "Polska")
print(slownik)

Wynik:

{'imie': 'Jan', 'age': 38, 'kraj': 'Polska'}

Warto nadmienić, że wartości w słowniku mogą być dowolnego typu i nie muszą być takie same dla każdej pary. W przykładzie powyżej użyłem liczb całkowitych (int) oraz ciągu znaków (string). Z kolei w przykładzie poniżej, mamy wartość typu string („Ala”) oraz wartość w postaci tablicy stringów.

Python
slownik_koty = {"Imie": "Ala", "Koty": ["kot1", "kot2", "kot3"]}
print("Koty Ali:")
print(slownik_koty)

Wynik działania programu:

Koty Ali:
{'Imie': 'Ala', 'Koty': ['kot1', 'kot2', 'kot3']}

Dodawanie elementów

Element (ang. item), czyli parę klucz-wartość, możemy dodać na kilka sposobów, które przedstawiłem w poniższych przykładach.

Przykład 1.

Python
wiek = {"Anna": 25, "Jan": 36, "Tadeusz": 30}
# Dodanie kolejnej osoby
wiek['Kamil'] = 28
print(wiek)

Wynik:

{'Anna': 25, 'Jan': 36, 'Tadeusz': 30, 'Kamil': 28}

Przykład 2.

Python
# Użycie metody update do dodania nowej pary
wiek.update({'Marzena': 40})

print(wiek)

Wynik

{'Anna': 25, 'Jan': 36, 'Tadeusz': 30, 'Kamil': 28, 'Marzena': 40}

Dostęp do elementów słownika

Do elementów słownika dostajemy się poprzez podanie klucza. Wykorzystajmy utworzony powyżej słownik wiek, aby znaleźć wiek Jana i Anny. Robimy to w ten sposób:

Python
print(wiek['Jan'])
print(wiek['Anna'])

Wynik:

36
25

Ten sam wynik możemy uzyskać korzystając z metody get().

Python
print(wiek.get('Jan'))
print(wiek.get('Anna'))

Wynik:

36
25

Usuwanie elmentów

Do usunięcia pary ze słownika używamy metody del(), jak w poniższym przykładzie.

Python
print("Słownik przed usunięciem elmentu")
print(wiek)

del(wiek['Jan']) 
print("Słownik po usunięciu elmentu")

print(wiek)

Wynik:

Słownik przed usunięciem elmentu
{'Anna': 25, 'Jan': 36, 'Tadeusz': 30, 'Kamil': 28, 'Marzena': 40}
Słownik po usunięciu elmentu
{'Anna': 25, 'Tadeusz': 30, 'Kamil': 28, 'Marzena': 40}

Jak posortować słownik w Pythonie?

Do sortowania słownika wykorzystamy funkcję sorted(). Funkcja ta zwraca posortowaną listę krotek (klucz, wartość), dlatego wynik należy skonwertować do słownika przy użyciu metody dict().

Python
slownik = {'banan': 3, 'jabłko': 1, 'pomarańcza': 2}

# Sortowanie według kluczy
posortowany_slownik = dict(sorted(slownik.items()))
print(posortowany_slownik)

Wynik:

{'banan': 3, 'jabłko': 1, 'pomarańcza': 2}

Widzimy, że słownik został posortowany po kluczach. Możemy również wykonać sortowanie po wartościach, dodając do funkcji sorted() opcjonalny argument key.

Python
# Sortowanie według wartości
posortowany_slownik = dict(sorted(slownik.items(), key=lambda x: x[1]))

print(posortowany_slownik)

Wynik:

{'banan': 3, 'jabłko': 1, 'pomarańcza': 2}

Iterowanie

Iterowanie po elementach słownika odbywa się przy użyciu pętli for. Składnia pętli for jest analogiczna jak w przypadku list. Żeby iterować po słowniku, tak naprawdę musimy „wydobyć” z niego listę. W zależnosci od tego, czy chcemy uzyskać tylko wartości ze słownika czy zarówno klucze i wartości, korzystamy z jednej z dwóch metod: values() albo items(), które zwracają odpowiednio listę wartości albo listę krotek klucz-wartość.

Przykład 1

Python
slownik = {'a': 1, 'b': 2, 'c': 3}

for wartosc in slownik.values():
    print(wartosc)

Wynik:

1
2
3

Przykład 2

Python
slownik = {'a': 1, 'b': 2, 'c': 3}

for klucz, wartosc in slownik.items():
    print(f"Klucz: {klucz}, Wartość: {wartosc}")

Wynik:

Klucz: a, Wartość: 1
Klucz: b, Wartość: 2
Klucz: c, Wartość: 3

Słownik w słowniku

Niejednokrotnie, wartościami są inne struktury danych, jak listy czy też słowniki. Struktura „słownik w słowniku”, nazywana również zagnieżdżonym słownikiem, jest bardzo przydatna, dlatego często pojawia się w rzeczywistych zastosowaniach. Weźmy na przykład poniższy słownik przechowujący informacje o pracownikach w firmie:

Python
# Słownik przechowujący informacje o pracownikach w firmie
firmowy_katalog = {
    'pracownik1': {
        'imie': 'Jan',
        'nazwisko': 'Kowalski',
        'stanowisko': 'Programista',
    },
    'pracownik2': {
        'imie': 'Anna',
        'nazwisko': 'Nowak',
        'stanowisko': 'Project Manager',
    },
    'pracownik3': {
        'imie': 'Piotr',
        'nazwisko': 'Wiśniewski',
        'stanowisko': 'Tester',
    }
}

Dostęp do słownika uzyskujemy, tak jak poprzednio wyjaśniłem poprzez klucz. Ponieważ mamy do czynienia z zagnieżdżonym słownikiem, to należy podać dwa klucze, jak w poniższym przykładzie.

Python
# Wyświetlenie danych o pracowniku2
print("Dane pracownika2:")
print("Imię:", firmowy_katalog['pracownik2']['imie'])
print("Nazwisko:", firmowy_katalog['pracownik2']['nazwisko'])
print("Stanowisko:", firmowy_katalog['pracownik2']['stanowisko'])

Wynik

Dane pracownika2:
Imię: Anna
Nazwisko: Nowak
Stanowisko: Project Manager

Inne operacje

Poniżej zestawiłem kilka metod, które są przydatne podczas pracy ze słownikami:

MetodaDziałanie
clear()Usuwa wszystkie elementy słownika
copy()Zwraca kopię słownika
items()Zwraca listę zawierającą krotkę dla każdej pary
keys()Zwraca listę zawierającą klucze słownika
pop()Usuwa i zwraca element
popitem()Usuwa ostatnio wstawioną parę

Pobierz notatnik Jupyter z kodem


Podsumowanie

Z artykułu dowiedziałeś się czym jest słownik i jak wykonywać podtawowe operacje na słownikach, między innymi takie operacje jak:

  • tworzenie,
  • dodawanie i usuwanie elementów,
  • dostęp do elementów,
  • iterowanie.
Szymon Skoneczny

O autorze

Dr hab. inż. Szymon Skoneczny specjalizuje się w informatyce przemysłowej i symulacjach komputerowych. Współpracował z takimi uczelniami jak Politechnika Krakowska i Akademia Górniczo-Hutnicza oraz firmami, m. in. Siemens, Electricite de Fracne, ArcelorMittal.