Retour au cours

compréhensions dict et set

les compréhensions s’appliquent aussi aux sets et dicts pour créer des structures en une expression.

objectifs

  • écrire des set comprehensions {expr for x in data if cond}
  • écrire des dict comprehensions {key(x): value(x) for x in data if cond}
  • filtrer et transformer proprement
  • manipuler des données réalistes (liste de dicts)

explication détaillée

syntaxe générale :

  • set : {f(x) for x in it if cond(x)}
  • dict : {k(x): v(x) for x in it if cond(x)}

attention aux collisions de clés dans un dict : la dernière valeur gagne.

exemples exécutables

# set des carrés pairs
s = {n*n for n in range(10) if n % 2 == 0}
print(s)
# dict mot -> longueur
words = ["python", "data", "ai"]
d = {w: len(w) for w in words}
print(d)
# dict filtré
src = {"a": 1, "b": 2, "c": 3, "d": 4}
odd = {k: v for k, v in src.items() if v % 2 == 1}
print(odd)
# cas données : liste de dicts vers dict indexé par id
rows = [{"id": 1, "name": "ana"}, {"id": 2, "name": "bob"}]
by_id = {r["id"]: r for r in rows}
print(by_id[2]["name"])

bonnes pratiques

  • privilégiez la lisibilité, surtout pour les dict comprehensions
  • évitez les expressions trop lourdes → extraire une fonction nommée
  • en cas de collision de clés, décidez explicitement de la stratégie

pièges courants

  • oublier que les sets suppriment les doublons
  • perdre des entrées dans un dict à cause d’une clé non unique
  • complexité cachée si vous imbriquez trop de boucles

exercices

  1. set des longueurs uniques des mots d’une phrase.
  2. dict mot -> nombre d'occurrences pour une liste de mots.
  3. dict id -> name.title() depuis une liste de dicts, en filtrant ceux sans id.