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.