Pragniesz opanować sztukę pracy ze słownikami w Pythonie? Ten przewodnik krok po kroku odkryje przed Tobą metody, dzięki którym odczytasz, zmodyfikujesz i wykonasz wszelkie typowe operacje na słownikach w Pythonie.
Zaczniemy od fundamentów, czyli omówienia podstawowych właściwości słowników, następnie stworzymy przykładowy słownik, by w końcu wprowadzić w życie praktyczne umiejętności, modyfikując go za pomocą metod dostępnych w Pythonie.
Przejdźmy do dzieła…
Słowniki w Pythonie – podstawowe informacje
Słowniki to wbudowane struktury danych, które Python oferuje swoim użytkownikom. Umożliwiają one przechowywanie danych w formie par klucz-wartość, kreując powiązania lub odwzorowania między poszczególnymi kluczami i ich wartościami.
Klucze w słowniku muszą być unikalne i haszowalne. Dzięki kluczom możemy błyskawicznie wyszukiwać powiązane z nimi wartości, korzystając z wbudowanych metod. O tych metodach opowiemy za moment.
Podczas inicjalizacji słownika w Pythonie, masz dwie opcje: albo od razu zdefiniować wszystkie pary klucz-wartość, albo utworzyć pusty słownik i stopniowo dodawać do niego elementy.
>>> dict1 = {'language':'Python','like':True} >>> type(dict1) <class 'dict'> # lub możemy zrobić to tak: >>> dict1 = {} >>> dict1['language']='Python' >>> dict1['like']=True
Metody słownikowe Pythona – typowe operacje
Uwaga: Aby bez problemu śledzić przykłady, upewnij się, że masz zainstalowaną wersję Pythona 3.7 lub nowszą.
Możesz eksperymentować z kodem bezpośrednio w REPL Pythona lub skorzystać z internetowego edytora, takiego jak dostępny na newsblog.pl.
>>> person = {'name':'Alice', ... 'city':'Portland', ... 'interest':'Programming', ... 'profession':'Developer' ... }
Mając już zainicjalizowany słownik, możemy przyjrzeć się różnorodnym metodom słownikowym.
Pobieranie kluczy słownika za pomocą metody keys()
Jedną z fundamentalnych operacji podczas pracy ze słownikiem w Pythonie jest możliwość uzyskania dostępu do wszystkich kluczy, wartości, a także par klucz-wartość. Aby wyciągnąć klucze ze słownika, użyjemy metody keys(), co ilustruje poniższy przykład:
>>> person.keys() dict_keys(['name', 'city', 'interest', 'profession'])
Pobieranie wartości słownika za pomocą metody values()
Metoda values() umożliwia uzyskanie wszystkich wartości z naszego słownika. Jest to przydatne, gdy potrzebujemy dalej przetwarzać te dane.
Spójrzmy, jak pobrać wszystkie wartości ze słownika „person”:
>>> person.values() dict_values(['Alice', 'Portland', 'Programming', 'Developer'])
Pobieranie par klucz-wartość za pomocą metody items()
Metoda items() zwraca listę krotek zawierających pary klucz-wartość. W przypadku słownika „person”, wywołanie tej metody zaowocuje listą krotek, gdzie każda krotka reprezentuje parę klucz-wartość:
>>> person.items() dict_items([('name', 'Alice'), ('city', 'Portland'), ('interest', 'Programming'), ('profession', 'Developer')])
Tworzenie płytkiej kopii słownika za pomocą metody copy()
Metoda copy() umożliwia stworzenie nowej, płytkiej kopii słownika Pythona.
>>> person_cpy = person.copy()
W tym przykładzie, `person_cpy` staje się płytką kopią słownika `person`. Teraz, spróbujmy dokonać modyfikacji tej kopii, zmieniając wartość klucza „name” na „Bob”.
>>> person_cpy['name'] = 'Bob' >>> person_cpy
Po wyświetleniu zawartości słownika `person_cpy`, zauważymy, że wartość klucza „name” została zaktualizowana na „Bob”.
{ 'name': 'Bob', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer' }
Jednakże, oryginalny słownik `person` pozostaje niezmieniony.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer' }
Ustawianie wartości domyślnych za pomocą metody setdefault()
Podczas pracy ze słownikami, bardzo często można spotkać się z błędem `KeyError`, który pojawia się, gdy dany klucz nie istnieje w słowniku. Przykładowo, gdy spróbujemy uzyskać dostęp do klucza „age”, którego nie ma w słowniku:
>>> person['age'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'age'
Możemy jednak uniknąć tego typu błędów, korzystając z wbudowanych metod `setdefault()` i `get()` zamiast bezpośredniego dostępu do wartości.
Metoda `setdefault(key)` zwraca `dict[’key’]`, jeżeli klucz jest obecny w słowniku.
>>> person.setdefault('name') 'Alice'
Jeśli klucz nie istnieje w słowniku, to metoda dodaje ten klucz ze domyślną wartością `None`.
>>> person.setdefault('address') >>> person
W naszym przypadku, klucz „address” nie istniał w słowniku `person`. Widzimy, że został dodany z domyślną wartością `None`.
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': None }
Możemy teraz ustawić wartość klucza „address” na konkretny adres:
>>> person['address'] = "10, xyz street"
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street' }
Możemy również od razu określić wartość w wywołaniu metody:
>>> person.setdefault('country','USA') 'USA' >>> person
Ponieważ klucz „country” nie był wcześniej obecny w słowniku, został dodany z wartością „USA”.
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
Pobieranie konkretnej wartości za pomocą metody get()
Metoda `get()` pozwala na pobranie wartości odpowiadającej danemu kluczowi. Dodatkowo, możemy opcjonalnie określić wartość domyślną, która zostanie zwrócona, jeśli klucz nie zostanie znaleziony w słowniku.
Gdy spróbujemy uzyskać wartość klucza „name”, otrzymamy „Alice”, ponieważ ten klucz istnieje w słowniku:
>>> person.get('name') 'Alice'
W słowniku `person` nie istnieje klucz „gpa”. Gdy spróbujemy uzyskać jego wartość, nie otrzymamy nic. Jednak, jeśli wyświetlimy wartość, otrzymamy `None`.
>>> person.get('gpa') >>> print(person.get('gpa')) None
Jeśli jednak przekażemy opcjonalną wartość domyślną, otrzymamy tę wartość zamiast `None`.
>>> person.get('gpa','not found') 'not found'
Warto zauważyć, że metoda `get()` nie dodaje klucza „gpa” do słownika.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
Zrozumienie różnic między setdefault() a get()
Chociaż obie metody, `setdefault()` i `get()`, mogą być używane do obsługi błędów `KeyError`, warto podsumować ich różnice:
- `dict.setdefault(key, val)` dodaje klucz z domyślną wartością `val`. Jeśli `val` nie zostanie podane, klucz zostanie dodany z wartością domyślną `None`.
- `dict.get(key, val)` zwraca wartość odpowiadającą kluczowi ze słownika. Jeśli klucz nie istnieje, zwraca `val` (jeżeli zostało podane) lub `None` – ale nie dodaje klucza do słownika.
Można również użyć `defaultdict` w Pythonie, aby jeszcze lepiej zarządzać błędami `KeyError`.
Aktualizacja zawartości słownika za pomocą metody update()
Możesz zaktualizować istniejący słownik w Pythonie, korzystając z par klucz-wartość z innego słownika. Metoda `update()` pozwala również zaktualizować słownik zawartością dowolnego obiektu iterowalnego w Pythonie.
Zdefiniujmy słownik `more_details`. Następnie zaktualizujemy słownik `person`, dodając do niego zawartość słownika `more_details`:
>>> more_details = {'hobby':'singing', 'likes':'sweets'} >>> person.update(more_details)
Jak widać na poniższym wyniku, klucze „hobby” i „likes” zostały dodane do słownika `person`.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA', 'hobby': 'singing', 'likes': 'sweets' }
Usuwanie ostatnio dodanego elementu za pomocą metody popitem()
Metoda słownikowa `popitem()` umożliwia usunięcie ostatniej dodanej pary klucz-wartość.
>>> person.popitem() ('likes', 'sweets')
Wywołanie metody `popitem()` na słowniku `person` zwraca parę klucz-wartość (’likes’, 'sweets’) – ostatni element dodany do słownika.
Metoda ta również usuwa tę parę klucz-wartość. Możemy to potwierdzić, sprawdzając zawartość słownika:
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA', 'hobby': 'singing' }
Usuwanie elementu słownika za pomocą metody pop()
Wiemy już, że metoda słownikowa `popitem()` usuwa i zwraca ostatnią parę klucz-wartość. Jednak, czasami chcemy usunąć inne elementy, a nie tylko ostatnio dodaną parę klucz-wartość.
W tym celu możemy skorzystać z metody słownikowej `pop(key)`. Użycie `.pop(key)` w słowniku zwraca wartość odpowiadającą danemu kluczowi oraz usuwa parę klucz-wartość ze słownika.
Oto przykład:
>>> person.pop('hobby') 'singing'
Po usunięciu elementu odpowiadającego kluczowi „hobby”, zauważamy, że nie ma go już w słowniku.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
Jeśli przekażemy klucz, który nie istnieje, napotkamy wyjątek `KeyError`, jak w przykładzie:
>>> person.pop('age') Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'age'
Pojawił się błąd `KeyError`, ponieważ klucz „age” nie występuje w słowniku `person`.
W przeciwieństwie do metody `pop()` dla list, która domyślnie usuwa ostatni element, metoda słownikowa `pop()` wymaga podania klucza. Jeśli klucz nie zostanie określony, wystąpi błąd.
>>> person.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: pop expected at least 1 argument, got 0
Usuwanie wszystkich elementów słownika za pomocą metody clear()
Metody `pop()` i `popitem()` usuwają tylko jedną parę klucz-wartość na raz. Jeśli chcesz usunąć wszystkie elementy ze słownika, skorzystaj z metody `clear()`.
>>> person.clear() >>> person {}
Jak widać, wywołanie metody `clear()` na słowniku `person` usunęło wszystkie pary klucz-wartość, przez co słownik jest teraz pusty.
Podsumowanie metod słownikowych Pythona
Oto krótkie podsumowanie metod słownikowych Pythona, których się nauczyliśmy.
Metoda|Składnia|Opis
|—|—|—|
keys()|dict1.keys()|Zwraca klucze `dict1`
values()|dict1.values()|Zwraca wartości `dict1`
items()|dict1.items()|Zwraca listę wszystkich par klucz-wartość w `dict1`
copy()|dict1.copy()|Zwraca płytką kopię `dict1`
setdefault()|dict1.setdefault(key, default_value)|– Dodaje klucz z opcjonalną wartością domyślną jako klucz do `dict1` (jeśli nie określono, domyślną wartością jest `None`)
– Zwraca `dict1[key]` jeśli klucz jest już obecny
get()|dict1.get(key,default_value)|– Zwraca `dict1[key]` jeśli klucz jest obecny w `dict1`; W przeciwnym razie zwraca `default_value`
– Jeśli klucz nie występuje w `dict1` i nie określono `default_value`, zwraca `None`
update()|dict1.update(iterable1)|Aktualizuje `dict1` parami klucz-wartość z `iterable1`
popitem()|dict1.popitem()|Usuwa i zwraca ostatnią parę klucz-wartość z `dict1`
pop()|dict1.pop(key)| – Usuwa i zwraca wartość odpowiadającą kluczowi: `dict1[key]`
– Podnosi `KeyError`, jeśli klucza nie ma w `dict1`
clear()|dict1.clear()| Usuwa wszystkie pozycje z `dict1`
Podsumowanie
W tym poradniku nauczyłeś się, jak używać powszechnych metod do wykonywania operacji odczytu, aktualizacji i usuwania w słownikach Pythona. Dodatkowo dowiedziałeś się, jak metody `get()` i `setdefault()` pomagają w obsłudze wyjątków `KeyError`, poprzez zwracanie wartości domyślnej lub dodawanie wpisu z wartością domyślną do słownika. Potrafisz też sortować słownik Pythona według klucza lub wartości.
Teraz sprawdź listę przydatnych metod listy Pythona. Miłego kodowania!
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.