Adloun

É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.