Jak sprawdzić, czy klucz istnieje w słowniku Pythona

Dowiedz się, jak sprawdzić, czy klucz istnieje w słowniku Pythona. Porównaj operator in, metodę get(), setdefault i obsługę wyjątków KeyError.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Podczas interakcji z dynamicznie wypełnianymi słownikami — na przykład podczas analizowania parametrów użytkownika, nadpisywania konfiguracji, rekordów API lub ładunków JSON — próba pobrania wartości przy użyciu nieistniejącego klucza spowoduje wyświetlenie błędu „KeyError” i awarię aplikacji. Dlatego wdrożenie kontroli obronnych jest niezbędne.

Najbardziej bezpośrednim, Pythonicznym i najszybszym sposobem sprawdzenia, czy klucz istnieje, jest użycie operatora członkostwa `in`: `if klucz w my_dict:`. To wyrażenie zwraca wartość „True”, jeśli klucz zostanie znaleziony, lub „False”, w przeciwnym razie. Pod maską słowniki Pythona są implementowane przy użyciu tablic skrótów, dzięki czemu kontrole członkostwa są wysoce zoptymalizowane i działają ze średnią złożonością czasową O(1).

Alternatywnie, jeśli chcesz odzyskać wartość klucza, ale powrócić do wartości domyślnej w przypadku braku klucza, możesz użyć metody `.get(key, default)`. Jeśli klucz istnieje, zwraca wartość; jeśli nie, zwraca wartość domyślną (lub „Brak”, jeśli została pominięta) bez zgłaszania błędu „KeyError” lub wymagania instrukcji warunkowych.

Dane wyjściowe kodu i wykonania

Ten skrypt demonstruje weryfikację istnienia klucza przy użyciu operatora in, metod zastępczych get() i obsługę wyjątków KeyError.

check_dict_keys.py
Spróbuj w Edytorze
user = {"id": 101, "name": "Alice", "role": "admin"}

# 1. Checking key existence using the 'in' operator (Recommended)
if "role" in user:
    print("Found 'role' key. Value is:", user["role"])

if "email" not in user:
    print("'email' key is missing.")

# 2. Retrieving value safely using get() with a fallback
email_address = user.get("email", "no-email@example.com")
print("Email address:", email_address)

# 3. Handling KeyError exception manually
try:
    invalid_lookup = user["location"]
except KeyError:
    print("Caught KeyError: 'location' key does not exist.")
Wyjście terminala
Found 'role' key. Value is: admin
'email' key is missing.
Email address: no-email@example.com
Caught KeyError: 'location' key does not exist.

Wdrażanie krok po kroku

  • Użyj operatora in (np. jeśli klucz w słowniku:) do standardowej kontroli istnienia klucza.
  • Użyj operatora not in, aby sprawdzić, czy w strukturze słownika brakuje klucza.
  • Wywołaj Dictionary.get(key, default_value), aby bezpiecznie pobrać wartość, zapewniając jednocześnie domyślną rezerwę.
  • Zawijaj bezpośrednie wyszukiwania w blokach try-except KeyError podczas obsługi brakujących kluczy w integracjach innych firm.

Często zadawane pytania

Jaka jest złożoność czasowa sprawdzenia, czy klucz istnieje w słowniku?

Jest to średnia złożoność czasowa O(1), ponieważ słowniki pod maską używają tabel skrótów, dzięki czemu czas wyszukiwania jest stały niezależnie od rozmiaru.

Czy mogę sprawdzić, czy wartość istnieje w słowniku?

Tak, ale musisz przeszukać widok wartości: if wartość w my_dict.values():. Należy pamiętać, że sprawdzanie wartości zajmuje czas liniowy O(N), ponieważ Python musi przejść przez każdy element w słowniku.

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.