Adloun

Écrire differences(d1, d2) renvoyant trois listes triées

Exercice d'entraînement · niveau 2 · NSI (première), chapitre 5 — Les dictionnaires · Itérer, regrouper, comparer

Énoncé

Écrire differences(d1, d2) renvoyant trois listes triées : les clés perdues, les clés ajoutées, les clés dont la valeur a changé.

Corrigé


def differences(d1, d2):
    """Trois listes triees : cles perdues, cles ajoutees, cles modifiees."""
    perdues = sorted(c for c in d1 if c not in d2)
    ajoutees = sorted(c for c in d2 if c not in d1)
    modifiees = sorted(c for c in d1 if c in d2 and d1[c] != d2[c])
    return perdues, ajoutees, modifiees

avant = {"a": 1, "b": 2, "c": 3}
apres = {"b": 2, "c": 30, "d": 4}
assert differences(avant, apres) == (["a"], ["d"], ["c"])
assert differences(avant, avant) == ([], [], [])
assert differences({}, {"x": 1}) == ([], ["x"], [])

Les trois catégories sont disjointes, et une quatrième est implicite : les clés communes de même valeur, qu'on ne renvoie pas. Le sorted n'est pas cosmétique — sans lui, le résultat dépendrait de l'ordre d'insertion, c'est-à-dire d'une commodité de Python. C'est ce qui rend la fonction utilisable pour comparer deux versions d'un fichier de configuration : sa sortie est reproductible.

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.