Écrire index multiple(table, cle) , dictionnaire associant à chaque…
Exercice supplémentaire · niveau 2 · NSI (première), chapitre 6 — Traiter des données en tables · Trois façons de joindre
Énoncé
Écrire index_multiple(table, cle), dictionnaire associant à chaque valeur la liste des lignes correspondantes. Quelle propriété relie les longueurs des listes à celle de la table ?
Corrigé
def index_multiple(table, cle):
"""Valeur de clé -> liste des lignes qui la portent.
Postcondition : sum(len(v) for v in index.values()) == len(table).
"""
index = {}
for ligne in table:
index.setdefault(ligne[cle], []).append(ligne)
return index
{k: len(v) for k, v in index_multiple(eleves, "classe").items()}
# {'1G3': 2, '1G1': 2, '1G2': 1}
La propriété. Les listes forment une partition de la table : chaque ligne figure dans exactement une liste, donc la somme des longueurs vaut . Ici . C'est la postcondition, et c'est un contrôle à une ligne :
assert sum(len(v) for v in index.values()) == len(table)
Elle détecterait aussi bien une ligne oubliée qu'une ligne comptée deux fois.
C'est le même objet que groupe_par. Un index et un groupement sont la même construction, vue de deux côtés : on l'appelle index quand on veut y chercher, groupement quand on veut agréger. La structure de données ne change pas ; l'intention, si.
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.