10 przydatnych metod słownikowych Pythona

Photo of author

By maciekx

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