dict.setdefault()

Renvoie la valeur d’une clé, et commence par enregistrer une valeur par défaut dans le dictionnaire quand la clé est absente.

Renvoie
La valeur de la clé après l’appel : celle qui existait déjà, ou celle qui vient d’être insérée.
Modifie l’original
Oui
Sur cette page

Exemple

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

print(settings.setdefault("theme", "light"))
print(settings.setdefault("lang", "fr"))
print(settings)
Résultatrésultat enregistré, vous pouvez le vérifier
dark
fr
{'theme': 'dark', 'lang': 'fr'}

Définition et utilisation

#

La méthode setdefault(key, default) fonctionne comme get(), à une différence près : quand la clé est absente, elle l’insère dans le dictionnaire avec la valeur par défaut, et ne la renvoie qu’ensuite. Quand la clé existe, elle renvoie sa valeur et ne change rien.

Elle sert le plus souvent à regrouper des données. Écrire groups.setdefault(key, []).append(item) crée une liste vide la première fois qu’une clé apparaît, et ajoute à la liste existante à chaque occurrence suivante. Tout cela tient sur une seule ligne.

La valeur par défaut est créée à chaque appel, même quand la clé existe. Pour un regroupement intensif, collections.defaultdict est en général plus clair et plus rapide, puisqu’il ne crée les valeurs que quand elles sont vraiment nécessaires.

Syntaxe

#
Syntaxe
dictionnaire.setdefault(key, default=None)

Paramètres

#
  • key

    une clé du dictionnaire

    La clé à lire ou à ajouter.
  • default

    optionnel, par défaut None

    La valeur insérée quand la clé est absente.

Plus d’exemples

#
Regrouper en une ligne
Python
topics = [
    ("HTML", "balises"),
    ("CSS", "flexbox"),
    ("HTML", "formulaires"),
    ("CSS", "grid"),
]
by_course = {}

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

print(by_course)
Résultatrésultat enregistré, vous pouvez le vérifier
{'HTML': ['balises', 'formulaires'], 'CSS': ['flexbox', 'grid']}

Bonnes pratiques

#
  • Pour regrouper de nombreux éléments, pensez à defaultdict(list). Le code est plus court, et une liste vide n’est pas créée à chaque appel.
  • Si vous voulez seulement lire une valeur avec un repli, sans l’enregistrer dans le dictionnaire, utilisez get().

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.