1.1 Słownik i jego właściwości
Słownik (dictionary) w Pythonie to uporządkowana kolekcja par klucz-wartość, gdzie każdy klucz jest unikalny. Słowniki to jeden z najbardziej elastycznych i potężnych typów danych w Pythonie, używanych do przechowywania i zarządzania danymi. Będziemy z nich korzystać bardzo często, prawie tak często, jak z list. Wkrótce się o tym przekonasz :)

Podstawowe właściwości słowników:
1. Unikalne klucze
Każdy klucz w słowniku musi być unikalny. Jeśli do słownika dodaje się parę klucz-wartość z kluczem, który już istnieje, stara wartość zostanie zastąpiona nową. Na przykład, jeśli chcesz przechowywać dane o studentach i używasz ich identyfikatorów jako kluczy:
students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students) # Wyświetli: {'123': 'Mike', '124': 'Alice'}
2. Uporządkowanie
Ważne!
Do wersji Python 3.7 słowniki były nieuporządkowanymi kolekcjami, co oznacza, że kolejność elementów nie była gwarantowana. Od wersji Python 3.7 słowniki zachowują kolejność dodawania elementów, ale ten aspekt nie jest obowiązkową częścią specyfikacji języka aż do wersji Python 3.8, gdzie stał się standardem.
To było 5 lat temu. Uczymy się Pythona w wersji 3.12, więc możesz śmiało traktować słownik jako uporządkowany zbiór elementów
.
3. Zmienność
Słowniki są zmienne, co oznacza, że możesz dodawać, zmieniać lub usuwać elementy po utworzeniu słownika. Na przykład, dodajmy adres studenta:
student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student) # Wyświetli: {'name': 'John', 'age': 20, 'address': '123 Main St'}
4. Wydajność
Słowniki są zoptymalizowane do szybkiego wyszukiwania, dodawania i usuwania par klucz-wartość. Średnio, operacje wyszukiwania, dodawania i usuwania wykonują się w stałym czasie, O(1). Czym jest złożoność algorytmów dowiesz się trochę później, kiedy będziemy omawiać temat „Algorytmy i struktury danych”.
5. Klucze i wartości
Klucze w słowniku mogą być dowolnego niezmiennego typu danych, takiego jak stringi, liczby lub krotki. Wartości mogą być dowolnego typu danych, w tym inne słowniki.
6. Metody dostępu i zmiany
Słowniki obsługują różne metody dostępu do elementów, dodawania, zmiany i usuwania par klucz-wartość. Niektóre z tych metod to get()
, keys()
, values()
, items()
, update()
, pop()
, i inne. Szczegółowo w kolejnych wykładach.
7. Przeglądanie elementów
Możesz przeglądać klucze, wartości lub pary klucz-wartość w słowniku za pomocą pętli. To pozwala łatwo wykonywać operacje na elementach słownika. Na przykład:
student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
print(f"{key}: {value}")
Wynik będzie:
name: John
age: 20
address: 123 Main St
8. Haszowalność kluczy
Klucze w słowniku muszą być haszowalne (od słowa hash). Oznacza to, że klucze muszą mieć wartość hasz, która nie zmienia się w ciągu ich żywota. Wartość hasz uzyskuje się za pomocą funkcji haszującej, algorytmu, który przekształca dane wejściowe o dowolnej długości na wartość wyjściową o stałej długości. To właśnie nazywamy wartością hasz lub kodem hasz. Niezmienne typy danych, takie jak stringi, liczby i krotki, są haszowalne i mogą być używane jako klucze.
Więcej o funkcjach haszujących i haszowalności omówimy w temacie „Algorytmy i struktury danych”.
1.2 Tworzenie słownika za pomocą {}
Słowniki (dictionaries) w Pythonie można tworzyć na kilka sposobów. Oto różne sposoby tworzenia obiektu słownika z przykładami:
Użycie nawiasów klamrowych {}
Najczęściej używany sposób tworzenia słownika to użycie nawiasów klamrowych z parami klucz-wartość, oddzielonymi przecinkami. Sama para klucz-wartość oddzielona jest dwukropkiem.
# Tworzenie pustego słownika
empty_dict = {}
# Tworzenie słownika z elementami
person = {
"name": "John",
"age": 30,
"city": "New York"
}
print(type(person))
print(person)
Ważne!
Tworzenie słownika jest podobne do tworzenia zbioru. W zasadzie można nawet traktować słownik jak zbiór, składający się z kluczy, do których przypisane są wartości.
Jeśli w nawiasach klamrowych wymienione są tylko „klucze”, tworzy się zbiór, jeśli po kluczach jest dwukropek i wskazane wartości, tworzy się słownik. Puste nawiasy klamrowe – zawsze słownik.
# Tworzenie pustego słownika
empty_dict = {}
# Tworzenie zbioru z elementami
unique_items = {
"name",
"age",
"city"
}
print(type(unique_items))
print(unique_items)
1.3 Tworzenie słownika za pomocą funkcji dict()
Funkcja dict()
może być używana do tworzenia słownika z sekwencji par klucz-wartość, jak również z argumentów nazwanych.
Przykład z sekwencją par klucz-wartość:
# Tworzenie słownika z listy krotek
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)
Przykład z argumentami nazwanymi. Dodatkowe nawiasy tutaj nie są potrzebne:
# Tworzenie słownika z argumentami nazwanymi
person = dict(name="John", age=30, city="New York")
print(person)
Użycie metody dict.fromkeys()
Metoda fromkeys()
tworzy słownik z zadanymi kluczami i wartością domyślną.
# Tworzenie słownika z kluczami i wartością domyślną
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value)
print(person)
Słownik będzie miał trzy klucze, ale wszystkie będą miały jedną wartość.
1.4 Tworzenie słownika z istniejących zmiennych
Słowniki można tworzyć, używając zmiennych jako kluczy i wartości.
# Tworzenie słownika ze zmiennych
name = "John"
age = 30
city = "New York"
person = {"name": name, "age": age, "city": city}
print(person)
1.5 Użycie generatorów słowników
Generatory słowników pozwalają tworzyć słowniki za pomocą krótkich i zwięzłych konstrukcji, podobnych do generatorów list.
# Tworzenie słownika za pomocą generatora słownika
squares = {x: x**2 for x in range(1, 6)}
print(squares)
1.6 Odwoływanie się do wartości w słowniku
Aby uzyskać wartość po kluczu, używa się składni []
:
# Odwoływanie się do wartości w słowniku
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"]) # Wyświetli: John
Ważne!
Jeśli klucz nie zostanie znaleziony, wystąpi błąd KeyError
. Aby tego uniknąć, można użyć metody get()
, która zwraca wartość po kluczu, jeśli klucz istnieje, lub None
(lub inną wartość domyślną), jeśli klucz nie zostanie znaleziony.
# Użycie metody get() dla odwołania się do wartości w słowniku
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name")) # Wyświetli: John
print(person.get("address", "Adres nie znaleziony")) # Wyświetli: Adres nie znaleziony
1.7 Zmiana wartości w słowniku
Wartości w słowniku można zmieniać, odwołując się do nich po kluczu i przypisując nowe wartości.
# Zmiana wartości w słowniku
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person) # Wyświetli: {'name': 'John', 'age': 31, 'city': 'New York'}
1.8 Usuwanie elementów ze słownika
Elementy można usuwać za pomocą operatora del
lub metody pop()
.
# Usuwanie elementu za pomocą del
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person) # Wyświetli: {'name': 'John', 'city': 'New York'}
# Usuwanie elementu za pomocą pop()
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person) # Wyświetli: {'name': 'John', 'city': 'New York'}
print(age) # Wyświetli: 30
1.9 Sprawdzanie obecności klucza w słowniku
Możesz sprawdzić, czy klucz znajduje się w słowniku, używając operatora in
.
# Sprawdzanie obecności klucza w słowniku
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person) # Wyświetli: True
print("address" in person) # Wyświetli: False
1.10 Przeglądanie elementów słownika
Możesz przeglądać klucze, wartości lub pary klucz-wartość w słowniku:
# Przeglądanie kluczy słownika
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key)
# Przeglądanie wartości słownika
for value in person.values():
print(value)
# Przeglądanie par klucz-wartość słownika
for key, value in person.items():
print(f"{key}: {value}")
1.11 Przykłady użycia słowników w prawdziwych zadaniach
Rozważmy kilka przykładów z życia codziennego, gdzie użycie słowników może być przydatne:
Przykład 1: Liczenie częstotliwości słów w tekście
Załóżmy, że mamy tekst i chcemy policzyć, ile razy każde słowo występuje w tym tekście.
text = "hello world hello"
word_count = {}
for word in text.split():
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count) # Wyświetli: {'hello': 2, 'world': 1}
Przykład 2: Przechowywanie danych o studentach
Możemy użyć słownika do przechowywania danych o studentach, gdzie kluczami będą ich identyfikatory, a wartościami — dane o nich.
students = {
"123": {"name": "John", "age": 20, "major": "Computer Science"},
"124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"]) # Wyświetli: John
Przykład 3: Książka telefoniczna
Słowniki można używać do tworzenia prostej książki telefonicznej, gdzie kluczami będą imiona, a wartościami —numery telefonów.
phone_book = {
"John": "123-456-7890",
"Alice": "987-654-3210"
}
print(phone_book["Alice"]) # Wyświetli: 987-654-3210
GO TO FULL VERSION