2023-02-28 10:25 Czas czytania: 16 min

10 przydatnych metod słownikowych Pythona

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!

Anna Nowak
Autor
Polska

Tworzy zwięzłe wyjaśnienia, zamieniając złożone tematy w praktyczne wnioski.

Poprzedni artykuł
Wyjaśnienie ram zarządzania danymi: jakie korzyści przynosi firmom?
Następny artykuł
Jak wyłączyć powiadomienia o nagrywaniu rozmów na Androidzie (Realme, Oppo, Vivo, iQOO, Xiaomi i OnePlus)