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
- set des longueurs uniques des mots d’une phrase.
- dict
mot -> nombre d'occurrencespour une liste de mots. - dict
id -> name.title()depuis une liste de dicts, en filtrant ceux sansid.