Kodokon kodokon.com

Compréhensions de listes et de dictionnaires

Remplacez vos boucles de construction par des compréhensions expressives, pour transformer, filtrer et réindexer vos données.

8 min · 3 questions

Ouvrir cette leçon dans Kodokon

Une compréhension de liste condense le motif le plus fréquent de la programmation : construire une liste en transformant ou en filtrant une séquence. La syntaxe se lit comme une phrase : [expression for element in sequence if condition]. Même résultat qu'une boucle avec append, en une ligne déclarative que tout développeur Python reconnaît immédiatement.

PYTHON
prices = [12.0, 49.9, 5.5, 199.0]

with_tax = [round(p * 1.2, 2) for p in prices]
cheap = [p for p in prices if p < 50]

print(with_tax)  # [14.4, 59.88, 6.6, 238.8]
print(cheap)     # [12.0, 49.9, 5.5]
Transformer avec l'expression, filtrer avec le if final.

La compréhension de dictionnaire suit la même logique avec la syntaxe {cle: valeur for ...}. Cas d'usage très courant en projet : réindexer une liste d'objets par leur identifiant, pour obtenir ensuite des recherches instantanées au lieu de reparcourir la liste à chaque besoin.

PYTHON
users = [
    {"id": 7, "name": "Alice"},
    {"id": 12, "name": "Bruno"},
    {"id": 31, "name": "Chloe"},
]

by_id = {u["id"]: u["name"] for u in users}
print(by_id[12])    # Bruno
print(31 in by_id)  # True
Réindexer par identifiant : un classique du code professionnel.

Deux positions pour if, deux rôles différents. Placé après le for, il filtre : les éléments rejetés n'apparaissent pas dans le résultat. Placé avant le for, sous forme d'expression conditionnelle (a if condition else b), il choisit une valeur pour chaque élément : la liste garde alors la même longueur que la source.

PYTHON
scores = [45, 82, 67, 91]

labels = ["pass" if s >= 60 else "fail" for s in scores]
print(labels)  # ['fail', 'pass', 'pass', 'pass']
L'expression conditionnelle transforme chaque élément sans en retirer.

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Dans [x * 2 for x in data if x > 0], quel est le rôle du if ?
    • Il choisit entre deux valeurs pour chaque élément
    • Il filtre : seuls les éléments positifs sont conservés
    • Il arrête la compréhension au premier élément négatif
  2. Que produit {n: n * n for n in range(3)} ?
    • {0: 0, 1: 1, 2: 4}
    • {1: 1, 2: 4, 3: 9}
    • [0, 1, 4]
    • {0, 1, 4}
  3. Quand vaut-il mieux remplacer une compréhension par une boucle classique ?
    • Quand la logique devient complexe ou imbriquée
    • Dès que la liste dépasse cent éléments
    • Jamais, la compréhension est toujours préférable