Pytanie
Do elementu słownika w Pythonie można odwołać się bezpośrednio poprzez klucz lub za pomocą funkcji get.
Czy te dwie metody są sobie równoważne ?
Przykład
MAPA = {'jeden': 1, 'dwa': 2, 'trzy': 3} print(MAPA['jeden']) print(MAPA.get('jeden'))
Output:
1 1
Jak widać oba sposoby zwróciły ten sam wynik.
Odpowiedź
Odpowiedź brzmi nie. Pomimo, że w prezentowanym przypadku obie metody dały pożądany wynik nie zawsze tak będzie. Różnicę zauważysz przy próbie dostania się do nieistniejącego elementu słownika.
Odwołanie poprzez klucz
MAPA = {'jeden': 1, 'dwa': 2, 'trzy': 3} print(MAPA['cztery'])
Output:
Exception has occurred: KeyError 'cztery'
Jak widać zgłoszony został wyjątek. Teraz zobaczmy jak program zachowa się w przypadku użycia funkcji get.
Odwołanie za pomocom funkcji get
MAPA = {'jeden': 1, 'dwa': 2, 'trzy': 3} print(MAPA.get('cztery'))
Output:
None
Tym razem program zakończył się bez zgłaszania wyjątku, a próba pobrania nieistniejącego elementu spowodowała zwrócenie wartości None. Dodatkowo jeśli będzie to pomocne można zdefiniować jaka wartość ma być zwrócona w przypadku nie znalezienia elementu o takim kluczu w słowniku.
MAPA = {'jeden': 1, 'dwa': 2, 'trzy': 3} print(MAPA.get('cztery','brak'))
Output:
brak
Podsumowanie
Na koniec dodam, że nie istnieją żadne dobre praktyki dotyczące wyboru jednego z zaprezentowanych podjeść do pobierania wartości z mapy. To nie jest tak, że jedno rozwiązanie jest lepsze od drugiego. Znając różnicę w tych dwóch mechanizmach, będziesz w zależności od potrzeby, mógł podjąć świadomą decyzję, które podejście wybrać. Na pewno polecałbym użycie metody get, jeśli sami nie chcemy obsługiwać wyjątku, który może pojawić się przy próbie dostępu do mapy.