dict.setdefault()

Zwraca wartość klucza, a gdy go brakuje, najpierw zapisuje w słowniku wartość domyślną.

Zwraca
Wartość klucza po wywołaniu: dotychczasową albo właśnie wstawioną.
Zmienia oryginał
Tak
Na tej stronie

Przykład

#
Python
settings = {"theme": "dark"}

print(settings.setdefault("theme", "light"))
print(settings.setdefault("lang", "pl"))
print(settings)
Wynikzapisany wynik, możesz go sprawdzić
dark
pl
{'theme': 'dark', 'lang': 'pl'}

Definicja i zastosowanie

#

Metoda setdefault(klucz, domyslna) działa jak get() z jedną różnicą: jeśli klucza nie ma, wstawia go do słownika z wartością domyślną i dopiero wtedy ją zwraca. Gdy klucz istnieje, zwraca jego wartość i niczego nie zmienia.

Najczęściej używa się jej do grupowania danych. Zapis groups.setdefault(key, []).append(item) przy pierwszym wystąpieniu klucza tworzy pustą listę, a przy kolejnych dopisuje do już istniejącej. Wszystko mieści się w jednej linii.

Wartość domyślna powstaje przy każdym wywołaniu, nawet jeśli klucz istnieje. Przy intensywnym grupowaniu czytelniejszy i szybszy bywa collections.defaultdict, który tworzy wartości tylko wtedy, gdy są potrzebne.

Składnia

#
Składnia
slownik.setdefault(key, default=None)

Parametry

#
  • key

    klucz słownika

    Klucz do odczytania lub dodania.
  • default

    opcjonalny, domyślnie None

    Wartość wstawiana, gdy klucza brakuje.

Więcej przykładów

#
Grupowanie w jednej linii
Python
topics = [
    ("HTML", "znaczniki"),
    ("CSS", "flexbox"),
    ("HTML", "formularze"),
    ("CSS", "grid"),
]
by_course = {}

for course, topic in topics:
    by_course.setdefault(course, []).append(topic)

print(by_course)
Wynikzapisany wynik, możesz go sprawdzić
{'HTML': ['znaczniki', 'formularze'], 'CSS': ['flexbox', 'grid']}

Dobre praktyki

#
  • Do grupowania wielu elementów rozważ defaultdict(list). Kod jest krótszy, a pusta lista nie powstaje przy każdym wywołaniu.
  • Jeśli chcesz tylko odczytać wartość z wartością zastępczą, bez zapisywania jej w słowniku, użyj get().

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.