2024-07-24

Myśląc o Pythonie: Dictonaries

Dziś będziemy kontynuować Naszą przygodę. Ostatnim razem poznaliśmy tuples, dziś natomisto poznamy czym są dictonaries w Pythonie. Są to tzw. słowniki, potocznie zwane dictami. Dict to kolejna z kolei kolekcja w Pythonie, po listach i tuples. Charakteryzuje się ona tym, że przechowuje pary klucz wartość.

Słowniki nie mają indeksu, tak jak inne kolekcje w języku Python. Jak wspomniałem jest to zbiór wartości, zawierający pary klucz-wartość, a na dodatek jest mutowalny. Innymi słowy, słownik zawiera niejako, tak jak zwykły słownik, jakąś "definicję" i jej objaśnienie. Takie porównanie możemy odnieść właśnie do klucza i jego wartości, które znajdują się w środku dict.

Słowniki są mutowalne, zatem możemy, po utworzeniu takiego dict. Wartości dodawać, usuwać czy zmieniać. Jako, że dict nie ma indeksu, kolejność par klucz-wartość nie ma dla Nas znaczenia. Interesuje Nas wartość przypisana do konkretnego klucza, a nie do końca to na jakiej pozycji się ona znajduje. Możemy nadmienić, że za taki trochę indeks możemy uznać klucz wartości.

Praca z dictonaries w Pythonie

Zastanawiasz się jak więc w praktyce możemy pracować z dictem? Już śpieszę z odpowiedzią, weźmy sobie podstawowy słownik, zawierający dwie pary klucz-wartość. Przypiszmy go do zmiennej my_dict.

Podstawowy dictonary w Pythonie

Jak możemy zobaczyć, słownik tworzymy wymieniając kolejne pary po przecinku, wewnątrz nawiasów klamrowych. Każda para ma swój klucz, czyli wartość przed dwukropkiem. Widzimy też, że klucz jest wartością tekstową - string - bo jest ujęty w apostrof.

W Naszym, dopiero co stworzonym, słowniku mamy klucze tekstowe i przypisane do nich wartości typu int. Nie jest to jedyna kombinacja, ale na razie Nam ona wystarczy. Przejdźmy do tego, jak moglibyśmy odwołać się do wartości danej pozycji. Nie prostszego. Pamiętacie jak wspominałem, że klucz możemy potraktować jako indeks? Teraz Nam się to przyda.

odwoływanie się do wartości dictonary w Pythonie

Bowiem właśnie podając, w nawiasach kwadratowych, nazwę klucza. Możemy za jego pomocą odwołać się do wartości, jaka pod danym kluczem się kryje.

Zmiana wartości w dictonary w Pythonie

Wykorzystując powyższy sposób możemy także tę wartość zmienić. Skoro umiemy wywołać wartość danego klucza, to właśnie tak ją zmieńmy.

Zmiana pojedynczej wartości w dictonary w Pythonie

I tak oto, prostym sposobem, nauczyliśmy się już tworzyć słownik z parami klucz wartość (bo z czym innym), a następnie odwoływać się do wartości pod poszczególnymi kluczami, a nawet je zmieniać!

Dodanie nowej wartości w dictonary w Pythonie

No dobrze, ale co jeśli chcielibyśmy dodać jakąś nową pozycję do Naszego dicta. Nic prostszego, bowiem dodawanie możemy zrealizować poprzez podanie po nazwie słownika. W nawiasach kwadratowych. Nieistniejącego jeszcze klucza.

Dodawanie nowego klucza w dictonary w Pythonie

Finalnie, by udowodnić czy klucz został dodany, dictonary w Pythonie, możemy wyświetlić po prostu umieszczając nazwę Naszego słownika w funkcji print, co pozowli Nam zobaczyć całą zawartość kolekcji.

Po użyciu funkcji print, możemy zobaczyć, że Nas słownik zawiera teraz trzy pozycje. Są to trzy pary klucz-wartość: klucze typu string to kolejno a,b i new_key, a wartości typu całkowitoliczbowego to kolejno 11, 2 i 12.

Klucz dla każdej wartości musi być unikalny, gdybyśmy dodali ten sam klucz z nową wartością, jak łatwo się domyślić, nadpiszemy wartość już obecną w dict.

Czytelność dictonary w Pythonie

Możemy zwiększyć trochę czytelność Naszego kodu i by to pokazać zmienimy Nasz przykład. Utwórzmy sobie słownik z przykładowymi opcjami jakiegoś programu, a każdą parę klucz-wartość umieśćmy w osobnej linii, tak by lepiej było widać strukturę Naszego słownika.

dictonary w Pythonie zawierający opcje programu

Jak widzimy mamy słownik z ustawieniami jakiegoś programu, jakiejś aplikacji, Klucze są wartościami tekstowymi, natomiast wartości są różnego typu. Mamy tutaj wartości tekstowe, float i boolean. W słowniku możemy używać różnych typów wartości na raz. Rolę klucza natomiast może pełnić każdy niemutowalny typ danych, ale najczęściej jest to string. Jak wspomniałem wartość nie jest ograniczona tak jak klucz, możemy mieć tutaj string, number, array czy boolean - typ wartości dowolny.

Usuwanie w dictonary

Czasem zdarza się, że w Naszej kolekcji czegoś już nie chcemy - chcemy usunąć konkretny element lub wiele elementów. W dictonaries mamy takie operator jak del, za pomocą którego możemy usuwać. Przykładowo, by usunąć pewien klucz, musimy użyć operatora del po czym odwołać się do elementu do usunięcia.

usuwanie elementu w dictonary w Pythonie

Jak widzimy, w powyższym kodzie odwołałem się do elementu o kluczu 'show_errors' w tablicy options i usunąłem go za pomocą operatora del. Finalnie ze słownika zniknęła też powiązana z kluczem wartość. Klucz i wartość stanowią parę, więc jedno nie może istnieć bez drugiego. Konkludując operatora del możemy użyć do usunięcia wskazanego klucza.

Odwoływanie się do kluczy dictonary w Pythonie

W Naszym dict nie ma już klucza 'show_errors' bo przed chwilą usunąłem go za pomocą operatora del, co by się stało, gdybym przez przypadek lub umyślnie, odwołał się do takiego nieistniejącego klucza? Otrzymamy wtedy, w konsoli, błąd 'KeyError' jako, że próbujemy odwołać się do klucza, który nie istnieje.

Zatem jeśli w Naszym programie napiszemy i będziemy mieli kod, który próbuje odwołać się do jakiegoś klucza, i jeśli ten klucz nie istnieje, to będzie to skutkowało błędem. Czy jest zatem jakaś bezpieczniejsza metoda odwoływania się, która nie wygeneruje błędu? Oczywiście jest. Jest to jedna z metod wywoływanych na obiekcie typu słownik, nazywa się ona get.

Metoda get próbuje odwołać się do podanego klucza i zwrócić jego wartość. W przypadku braku istnienia takiego klucza, metoda get domyślnie zwróciłaby None, ale możemy jako drugi argument podać typ jaki ma ona zwrócić w takim wypadku. Jak widać, u mnie zwróciła False, jakoże, taki argument podałem po przecinku.

Metoda Update dictonary w Pythonie

Jak się może domyślasz po nagłówku, będziemy tutaj się rozwodzili nad update Naszego słownika. Czyli będziemy mówić o aktualizacji jego zawartości. Znamy już jedną metodę na to, po prostu odwołanie się do nieistniejącego klucza. Mamy jednak możliwość też dodać do Naszego dicta kolejny słownik z wymienionymi parami klucz-wartość. Jest to oczywiście szybsze niż dodawanie kolejnych pozycji słownika pojedynczo.

update w dictonary w Pythonie

Oczywiście każda metoda wywoływana na obiekcie ma nawiasy okrągłe, w których podajemy argumenty wywoływania. Nie inaczej jest tutaj, z tym, że w nawiasach okrągłych, jako argument funkcji, podajemy nawiasy klamrowe i w nich Nasze nowe elementy , po przecinku. Powtarzające się elementy zostaną oczywiście zastąpione.

Dictonary w Pythonie i pętla for

Podobnie jak w innych kolekcjach, przy pokazaniu słowników nie może zabraknąć pętli, która jest stworzona do działania z kolekcjami - pętli for. For oczywiście służy do przechodzenia, iterowania po kolekcjach. W słowniku mamy oczywiście klucze i wartości, możemy zatem to wykorzystać w pętli for, jak to zrobić?

pętla for i dictonary w Pythonie

Jak widzimy możemy przejść po Naszym zestawie wartości i wyświetlić każdy klucz - key, i każdą wartość - value. Robimy to o prostu używając dwóch zmiennych iteracyjnych w pętli for. W pierwszej zmiennej będą lądować kolejne klucze, a w drugiej - przypisane do nich wartości. W każdym przejściu pętli w tych zmiennych będą siedzieć aktualne pary klucz-wartość, więc w każdym przejściu możemy je też wyświetlić. Warto też zauważyć wykorzystanie metody items(), która pozwala Nam właśnie odczytać klucze i wartości dicta.

Listowanie tylko kluczy w pętli for

W pętli nie musimy jednak listować wszystkich kluczy i wartości, możemy wylistować tylko same klucze, a zrobimy to modyfikując oczywiście trochę pętlę. Użyjemy też innej metody, która zwróci Nam same klucze.

listowanie tylko kluczy w pętli w dictonary w Pythonie

Jak widzimy, dość intuicyjnie, jeśli chcemy wyświetlać tylko klucze, zamiast metody items() użyjemy keys(), przy czym będzie potrzebna Nam tylko jedna zmienna - na nazwy kluczy. W samym ciele pętli możemy owe klucze wyświetlić.

Wyświetlanie tylko wartości słownika w pętli

Zatem by zajmować się tylko wartościami z par klucz-wartość w Naszym słowniku, będziemy używać analogicznej metody - values()

Powyższe raczej już nie wymaga komentarza 😉

Dictonary comprehension

Tak jak w przypadku list, mieliśmy szybką metodę do ich tworzenia w jednej linii. Tak jeśli chodzi o słownik także możemy stworzyć takowy za pomocą wyrażenia jednoliniowego. Możemy tak zastąpić przykładowo pętlę, która normalnie tworzyłaby słownik lub funkcje lambda.

Nie jest to nie skomplikowanego, możemy po prostu w nawiasach klamrowych umieścić jakąś zmienną, po czym napisać dwukropek, następnie podajemy jakieś wyrażenie i pętlę for ze zmiennymi, a na koniec po czym iterujemy. Musimy bowiem mieć coś na podstawie czego będziemy iterując tworzyć słownik, weźmy prosty przykład konwertowania temperatur z stopni Fahrenheita na stopnie celsjusza w różnych miatach.

dict comprehension w dictonary w Pythonie

Jak możemy się przekonać powyżej, wystarczy podać klucz jaki ma być przypisany do każdej pary, następnie wyrażenie, które będzie coś robić z wartością z tej pary, a później po prostu iterować po kolekcji. Polecam trochę poćwiczyć , jak z każdą nową koncepcją, i do zobaczenia za tydzień!

Dodaj komentarz

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram