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.
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.
pusty_slownik = {}
print("pusty slownik: ")
print(pusty_slownik)
Wynik działania programu:
pusty slownik:
{}
Słownik także możemy stworzyć za pomocą konstruktora:
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.
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.
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.
# 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:
print(wiek['Jan'])
print(wiek['Anna'])
Wynik:
36
25
Ten sam wynik możemy uzyskać korzystając z metody get().
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.
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().
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.
# 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
slownik = {'a': 1, 'b': 2, 'c': 3}
for wartosc in slownik.values():
print(wartosc)
Wynik:
1
2
3
Przykład 2
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:
# 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.
# 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:
Metoda | Dział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.
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.