Explication de la leçon
Après cette leçon, tu seras capable de :
Choisir une structure de données est une décision de conception. Utilise une liste lorsque l'ordre et les valeurs répétées comptent ; un tuple pour un enregistrement fixe ; un ensemble pour l'unicité et l'appartenance ; et un dictionnaire pour une recherche par clé.
Un ensemble seul ne constitue pas un résultat ordonné. Lorsque tu souhaites obtenir la première occurrence de chaque élément dans son ordre d'origine, utilise un ensemble pour mémoriser ce qui a déjà été vu et une liste pour collecter les résultats. Cela combine les atouts des deux structures.
Tu peux également relier des collections entre elles : boucle sur une liste d'enregistrements, utilise un dictionnaire pour rechercher des détails par clé, et ajoute un résultat transformé à une nouvelle liste. Pour un rapport en plusieurs étapes, sépare le travail en normalisation, validation, comptage et présentation. Renvoie les données terminées lors de l'écriture d'une fonction réutilisable.
Aucune nouvelle syntaxe Python avancée n'est requise ici. Le défi consiste à choisir la bonne représentation et à combiner les techniques de cette unité et de Les bases de Python pour les programmeurs.
steps = ["build", "test", "build"]
release = ("v3", "eu")
tags = {"api", "worker", "api"}
ports = {"api": 8080, "worker": 9000}
print(len(steps))
print(release[0])
print(len(tags))
print(ports["worker"])Sortie :
3
v3
2
9000Chaque collection répond à un besoin distinct : séquence, enregistrement fixe, unicité ou recherche.
raw = ["api", "worker", "api", "cache"]
seen = set()
unique = []
for name in raw:
if name not in seen:
seen.add(name)
unique.append(name)
print(unique)Sortie :
['api', 'worker', 'cache']La liste conserve l'ordre ; l'ensemble mémorise les noms qui ont déjà été ajoutés.
jobs = [{"name": "search"}, {"name": "backup"}]
owners = {"search": "Maya"}
labels = []
for job in jobs:
labels.append(f"{job['name']}: {owners.get(job['name'], 'unassigned')}")
print(labels)Sortie :
['search: Maya', 'backup: unassigned']Le dictionnaire fournit une recherche facultative pour chaque enregistrement.
results = [("api", "passed"), ("worker", "failed"), ("cache", "passed")]
counts = {"passed": 0, "failed": 0}
for service, state in results:
if state in counts:
counts[state] += 1
print(f"Passed: {counts['passed']}")
print(f"Failed: {counts['failed']}")Sortie :
Passed: 2
Failed: 1Le dictionnaire à décompte fixe permet de conserver un rapport prévisible même lorsqu'une catégorie ne comporte aucun événement.
| Besoin | Structure ou technique |
|---|---|
| Valeurs ordonnées, y compris répétitions | list |
| Enregistrement de taille fixe | tuple |
| Suivi d'appartenance unique | set |
| Recherche de détails par identifiant | dict |
| Valeurs uniques ordonnées | Liste + ensemble combinés |
| Données associées facultatives | mapping.get(key, default) |
if mapping.get(key) pour vérifier l'existence élimine les valeurs falsy valides.