Lekcja 6 – Słowniki i zbiory

Kurs: Darmowy kurs Python dla początkujących
Lekcja 6: Słowniki i zbiory

⇓ spis treści ⇓


Tworzenie i operacje na słownikach

Słowniki (ang. dictionaries) to struktury danych w Pythonie, które przechowują pary klucz-wartość. Każdy klucz w słowniku musi być unikalny i niemodyfikowalny (np. liczby, stringi, krotki), natomiast wartości mogą być dowolnego typu. Słowniki są bardzo przydatne, gdy chcemy przechowywać dane w sposób umożliwiający szybki dostęp za pomocą kluczy.

1. Tworzenie słownika

Słownik można utworzyć za pomocą nawiasów klamrowych {}, gdzie klucze i odpowiadające im wartości oddzielamy dwukropkiem (:), a kolejne pary klucz-wartość oddzielamy przecinkami:

# Tworzenie słownika
slownik = {
    "imie": "Anna",
    "wiek": 25,
    "miasto": "Kraków"
}
print(slownik)

Możemy również użyć funkcji dict() do stworzenia słownika:

# Tworzenie słownika za pomocą dict()
slownik = dict(imie="Anna", wiek=25, miasto="Kraków")
print(slownik)
2. Dostęp do wartości

Aby uzyskać wartość z słownika, używamy klucza w nawiasach kwadratowych lub metody get():

# Dostęp do wartości
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

print(slownik["imie"])  # Wynik: Anna
print(slownik.get("wiek"))  # Wynik: 25

Jeśli spróbujesz uzyskać dostęp do klucza, który nie istnieje, użycie nawiasów kwadratowych spowoduje błąd, natomiast metoda get() zwróci None:

# Obsługa brakującego klucza
print(slownik.get("adres"))  # Wynik: None
3. Dodawanie i modyfikowanie elementów

Możesz dodać nowy element do słownika, przypisując wartość do nowego klucza, lub zmodyfikować istniejący klucz, przypisując mu nową wartość:

# Dodawanie i modyfikowanie elementów
slownik = {"imie": "Anna", "wiek": 25}

# Dodawanie nowego klucza
slownik["miasto"] = "Kraków"
print(slownik)  # Wynik: {'imie': 'Anna', 'wiek': 25, 'miasto': 'Kraków'}

# Modyfikowanie istniejącego klucza
slownik["wiek"] = 26
print(slownik)  # Wynik: {'imie': 'Anna', 'wiek': 26, 'miasto': 'Kraków'}
4. Usuwanie elementów

Python oferuje kilka sposobów usuwania elementów ze słownika:

  • pop() – Usuwa element o określonym kluczu i zwraca jego wartość.
  • popitem() – Usuwa ostatnio dodany element (w Pythonie 3.7+).
  • del – Usuwa element o określonym kluczu lub cały słownik.
  • clear() – Usuwa wszystkie elementy ze słownika.

Przykłady:

# Usuwanie elementów
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

# Usuwanie za pomocą pop()
wiek = slownik.pop("wiek")
print(wiek)  # Wynik: 25
print(slownik)  # Wynik: {'imie': 'Anna', 'miasto': 'Kraków'}

# Usuwanie za pomocą popitem()
ostatni = slownik.popitem()
print(ostatni)  # Wynik: ('miasto', 'Kraków')
print(slownik)  # Wynik: {'imie': 'Anna'}

# Usuwanie za pomocą del
del slownik["imie"]
print(slownik)  # Wynik: {}

# Usuwanie wszystkich elementów
slownik.clear()
print(slownik)  # Wynik: {}
5. Sprawdzanie obecności klucza

Aby sprawdzić, czy dany klucz istnieje w słowniku, możesz użyć operatora in:

# Sprawdzanie obecności klucza
slownik = {"imie": "Anna", "wiek": 25}

print("imie" in slownik)  # Wynik: True
print("adres" in slownik)  # Wynik: False
6. Długość słownika

Funkcja len() pozwala sprawdzić liczbę elementów w słowniku:

# Liczba elementów w słowniku
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}
print(len(slownik))  # Wynik: 3
7. Kopiowanie słownika

Możesz skopiować słownik, aby pracować na jego kopii zamiast na oryginalnym obiekcie. Python oferuje metodę copy():

# Kopiowanie słownika
slownik = {"imie": "Anna", "wiek": 25}
kopia = slownik.copy()
print(kopia)  # Wynik: {'imie': 'Anna', 'wiek': 25}
8. Przydatne metody słowników

Słowniki w Pythonie oferują wiele przydatnych metod:

  • keys() – Zwraca wszystkie klucze w słowniku.
  • values() – Zwraca wszystkie wartości w słowniku.
  • items() – Zwraca wszystkie pary klucz-wartość jako krotki.
# Metody słowników
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

print(slownik.keys())   # Wynik: dict_keys(['imie', 'wiek', 'miasto'])
print(slownik.values()) # Wynik: dict_values(['Anna', 25, 'Kraków'])
print(slownik.items())  # Wynik: dict_items([('imie', 'Anna'), ('wiek', 25), ('miasto', 'Kraków')])

Iteracja po słownikach

W Pythonie słowniki są strukturami, które przechowują dane w postaci par klucz-wartość. Bardzo często potrzebujemy przechodzić przez wszystkie klucze, wartości lub całe pary klucz-wartość w słowniku. Python oferuje wiele prostych sposobów na iterację po słownikach.

1. Iteracja po kluczach

Domyślnie, iterując po słowniku za pomocą pętli for, uzyskujemy dostęp do jego kluczy:

# Iteracja po kluczach
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

for klucz in slownik:
    print(klucz)

Wynik:

imie
wiek
miasto

Aby wyraźnie iterować tylko po kluczach, możesz użyć metody keys():

# Iteracja po kluczach za pomocą keys()
for klucz in slownik.keys():
    print(klucz)
2. Iteracja po wartościach

Jeśli chcesz iterować tylko po wartościach słownika, użyj metody values():

# Iteracja po wartościach
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

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

Wynik:

Anna
25
Kraków
3. Iteracja po parach klucz-wartość

Aby iterować zarówno po kluczach, jak i wartościach, użyj metody items(), która zwraca każdą parę klucz-wartość jako krotkę:

# Iteracja po parach klucz-wartość
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

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

Wynik:

imie: Anna
wiek: 25
miasto: Kraków
4. Iteracja z modyfikacją słownika

W niektórych przypadkach możesz chcieć zmodyfikować wartości w słowniku podczas iteracji. Pamiętaj, że modyfikowanie struktury słownika podczas iteracji może prowadzić do błędów, dlatego najlepiej iterować po kopii kluczy lub wartości:

# Modyfikacja wartości w słowniku
slownik = {"Anna": 25, "Jan": 30, "Maria": 35}

for klucz in list(slownik.keys()):  # Iteracja po kopii kluczy
    slownik[klucz] += 1  # Zwiększamy wiek o 1
print(slownik)

Wynik:

{'Anna': 26, 'Jan': 31, 'Maria': 36}
5. Sprawdzanie obecności klucza lub wartości podczas iteracji

Podczas iteracji możemy sprawdzać, czy dany klucz lub wartość spełnia określony warunek:

# Sprawdzanie obecności wartości
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

for klucz, wartosc in slownik.items():
    if wartosc == "Anna":
        print(f"Znaleziono klucz '{klucz}' z wartością '{wartosc}'")

Wynik:

Znaleziono klucz 'imie' z wartością 'Anna'
6. Iteracja z funkcją enumerate()

Jeśli chcesz uzyskać indeks każdej iteracji, możesz użyć funkcji enumerate() w połączeniu z metodami słowników:

# Iteracja z enumerate()
slownik = {"imie": "Anna", "wiek": 25, "miasto": "Kraków"}

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

Wynik:

Indeks: 0, Klucz: imie, Wartość: Anna
Indeks: 1, Klucz: wiek, Wartość: 25
Indeks: 2, Klucz: miasto, Wartość: Kraków
7. Iteracja po zagnieżdżonych słownikach

Słowniki mogą przechowywać inne słowniki jako wartości. W takich przypadkach iteracja wymaga odwoływania się do zagnieżdżonych struktur:

# Iteracja po zagnieżdżonych słownikach
zagniezdzony = {
    "Anna": {"wiek": 25, "miasto": "Kraków"},
    "Jan": {"wiek": 30, "miasto": "Warszawa"}
}

for osoba, dane in zagniezdzony.items():
    print(f"Dane dla {osoba}:")
    for klucz, wartosc w dane.items():
        print(f"  {klucz}: {wartosc}")

Wynik:

Dane dla Anna:
  wiek: 25
  miasto: Kraków
Dane dla Jan:
  wiek: 30
  miasto: Warszawa

Zbiory i ich zastosowania

Zbiory (ang. sets) to struktury danych w Pythonie, które przechowują unikalne elementy, bez zachowania ich kolejności. Zbiory są bardzo wydajne w operacjach takich jak sprawdzanie obecności elementu, usuwanie duplikatów czy wykonywanie operacji matematycznych na zbiorach (suma, różnica, część wspólna).

1. Tworzenie zbiorów

Zbiory można tworzyć za pomocą nawiasów klamrowych {} lub funkcji set(). Elementy w zbiorze muszą być niemodyfikowalne (np. liczby, stringi, krotki), a duplikaty są automatycznie usuwane:

# Tworzenie zbiorów
zbior = {1, 2, 3, 4, 5}
print(zbior)  # Wynik: {1, 2, 3, 4, 5}

# Zbiór z duplikatami
zbior = {1, 2, 2, 3, 4, 4, 5}
print(zbior)  # Wynik: {1, 2, 3, 4, 5}

# Tworzenie pustego zbioru
pusty_zbior = set()
print(pusty_zbior)  # Wynik: set()
2. Dodawanie i usuwanie elementów

Zbiory są modyfikowalne, co oznacza, że możesz dodawać lub usuwać elementy:

  • add() – Dodaje pojedynczy element do zbioru.
  • update() – Dodaje wiele elementów do zbioru.
  • remove() – Usuwa określony element; jeśli element nie istnieje, zgłasza błąd.
  • discard() – Usuwa określony element; jeśli element nie istnieje, nie zgłasza błędu.
  • pop() – Usuwa i zwraca losowy element ze zbioru.
  • clear() – Usuwa wszystkie elementy ze zbioru.
# Dodawanie i usuwanie elementów
zbior = {1, 2, 3}
zbior.add(4)  # Dodajemy pojedynczy element
print(zbior)  # Wynik: {1, 2, 3, 4}

zbior.update([5, 6])  # Dodajemy wiele elementów
print(zbior)  # Wynik: {1, 2, 3, 4, 5, 6}

zbior.remove(3)  # Usuwamy element 3
print(zbior)  # Wynik: {1, 2, 4, 5, 6}

zbior.discard(10)  # Usuwanie nieistniejącego elementu (bez błędu)
print(zbior)  # Wynik: {1, 2, 4, 5, 6}

element = zbior.pop()  # Usunięcie losowego elementu
print(f"Usunięto: {element}")
print(zbior)

zbior.clear()  # Usunięcie wszystkich elementów
print(zbior)  # Wynik: set()
3. Operacje na zbiorach

Zbiory w Pythonie obsługują wiele operacji matematycznych, które są bardzo przydatne w pracy z danymi:

  • | lub union() – Suma zbiorów (łączy elementy z obu zbiorów).
  • & lub intersection() – Część wspólna zbiorów (elementy obecne w obu zbiorach).
  • - lub difference() – Różnica zbiorów (elementy obecne tylko w jednym zbiorze).
  • ^ lub symmetric_difference() – Różnica symetryczna (elementy obecne w jednym, ale nie w obu zbiorach).
# Operacje na zbiorach
zbior1 = {1, 2, 3, 4}
zbior2 = {3, 4, 5, 6}

print(zbior1 | zbior2)  # Suma: {1, 2, 3, 4, 5, 6}
print(zbior1 & zbior2)  # Część wspólna: {3, 4}
print(zbior1 - zbior2)  # Różnica: {1, 2}
print(zbior1 ^ zbior2)  # Różnica symetryczna: {1, 2, 5, 6}
4. Sprawdzanie podzbiorów i nadzbiorów

Zbiory umożliwiają sprawdzanie, czy jeden zbiór jest podzbiorem lub nadzbiorem innego:

  • issubset() – Sprawdza, czy jeden zbiór jest podzbiorem innego.
  • issuperset() – Sprawdza, czy jeden zbiór jest nadzbiorem innego.
# Podzbiory i nadzbiory
zbior1 = {1, 2, 3}
zbior2 = {1, 2, 3, 4, 5}

print(zbior1.issubset(zbior2))  # Wynik: True
print(zbior2.issuperset(zbior1))  # Wynik: True
5. Sprawdzanie obecności elementu

Możesz sprawdzić, czy dany element znajduje się w zbiorze, używając operatora in:

# Sprawdzanie obecności elementu
zbior = {1, 2, 3, 4, 5}

print(3 in zbior)  # Wynik: True
print(10 in zbior)  # Wynik: False
6. Usuwanie duplikatów z list za pomocą zbiorów

Jednym z najczęstszych zastosowań zbiorów jest usuwanie duplikatów z listy:

# Usuwanie duplikatów
lista = [1, 2, 2, 3, 4, 4, 5]
zbior = set(lista)  # Konwersja listy na zbiór
lista_bez_duplikatow = list(zbior)  # Konwersja z powrotem na listę
print(lista_bez_duplikatow)  # Wynik: [1, 2, 3, 4, 5]
7. Wydajność zbiorów

Zbiory są bardzo wydajne w operacjach takich jak sprawdzanie obecności elementu, ponieważ używają tabeli mieszającej (ang. hash table) do szybkiego wyszukiwania. Dlatego są szczególnie przydatne w dużych zbiorach danych.

Następna lekcja ==> Instrukcje warunkowe



Spis Treści - darmowy kurs Python dla początkujących


Lekcja 1: Wprowadzenie do programowania
- Co to jest programowanie?
- Dlaczego warto uczyć się Pythona?
- Instalacja Python i wprowadzenie do edytorów (IDLE, VS Code).
Lekcja 2: Pierwszy program w Pythonie
- Składnia Pythona.
- Wyświetlanie tekstu (funkcja print).
- Komentarze i ich znaczenie.
Lekcja 3: Podstawowe typy danych
- Liczby: int, float.
- Ciągi znaków (stringi).
- Typ logiczny (boolean).
- Funkcja type.
Lekcja 4: Zmienne i operatory
- Deklaracja i przypisywanie zmiennych.
- Operatory arytmetyczne, porównania, logiczne.
Lekcja 5: Listy i krotki
- Tworzenie list i krotek.
- Indeksowanie, dodawanie, usuwanie elementów.
- Operacje na listach.
Lekcja 6: Słowniki i zbiory
- Tworzenie i operacje na słownikach.
- Iteracja po słownikach.
- Zbiory i ich zastosowania.
Lekcja 7: Instrukcje warunkowe
- Instrukcje if, elif, else.
- Operatory logiczne w praktyce.
Lekcja 8: Pętle
- Pętla for i while.
- Instrukcje break, continue, else w pętlach.
Lekcja 9: Funkcje
- Tworzenie i wywoływanie funkcji.
- Argumenty i wartości domyślne.
- Funkcje anonimowe (lambda).
Lekcja 10: Praca z plikami
- Otwieranie, czytanie i zapisywanie plików.
- Obsługa błędów przy pracy z plikami.
Lekcja 11: Podstawy programowania obiektowego
- Klasy i obiekty.
- Atrybuty i metody.
- Prosty projekt: Zarządzanie listą zadań.
Lekcja 12: Tworzenie prostego kalkulatora
- Łączenie funkcji i warunków.
- Obsługa błędów (try-except).
Lekcja 13: Zarządzanie plikami tekstowymi
- Program do przechowywania i wyszukiwania notatek w plikach.
Lekcja 14: Prosta gra tekstowa w Python
- Wprowadzenie do pętli i logiki gry.
- Interaktywna gra konsolowa, np. zgadywanie liczby.

Jeśli chciałbyś być poinformowany o następnych kursach to zapisz się do naszego newslettera: