Adloun

n° 203

Exercice supplémentaire · niveau 2 · NSI (première), chapitre 5 — Les dictionnaires · Les outils de la bibliothèque

Énoncé

setdefault et defaultdict raccourcissent le motif « créer la liste si elle n'existe pas, puis ajouter ». Réécrire par_initiale avec chacun. Puis lire une clé absente d'un defaultdict : comparer avec le Counter de l'exercice précédent.

Corrigé


groupes = {}
for nom in ["Nour", "Nadia", "Yanis"]:
    groupes.setdefault(nom[0], []).append(nom)
assert groupes == {"N": ["Nour", "Nadia"], "Y": ["Yanis"]}

from collections import defaultdict
g2 = defaultdict(list)
for nom in ["Nour", "Nadia", "Yanis"]:
    g2[nom[0]].append(nom)
assert dict(g2) == groupes

La différence, et elle est importante.


d = defaultdict(list)
_ = d["absente"]            # une simple LECTURE...
assert "absente" in d       # ... a CREE l'entree
assert len(d) == 1

Là où Counter rendait sans rien créer, defaultdict installe la valeur par défaut à la première lecture. Un programme qui interroge un defaultdict au fil de l'eau le fait donc grossir sans jamais rien y écrire explicitement — et len(d) finit par ne plus vouloir dire ce qu'on croyait. setdefault, lui, ne crée que là où on l'appelle, ce qui le rend plus prévisible au prix d'une écriture plus lourde.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.