Explication de la leçon
Après cette leçon, tu seras capable de :
Les réponses et configurations réelles combinent souvent plusieurs collections : un dictionnaire peut contenir une liste de services, et chaque service peut être lui-même un dictionnaire. Lis un chemin imbriqué un niveau à la fois. config["services"] sélectionne la liste ; [0] sélectionne un enregistrement ; ["name"] sélectionne un champ.
Les collections imbriquées sont modifiables. Modifier un champ imbriqué via son chemin modifie la collection d'origine. Le type de la collection externe n'enlève pas la mutabilité des objets qu'elle contient.
Lorsqu'une structure imbriquée est facultative, utilise .get(key, {}) pour obtenir un dictionnaire vide comme valeur de repli. Lis une valeur numérique facultative avec .get(key, default) plutôt qu'avec une vérification de valeur de vérité : la valeur 0 peut tout à fait être intentionnelle.
config = {"targets": [{"name": "staging", "port": 8081}, {"name": "prod", "port": 443}]}
print(config["targets"][1]["port"])Sortie :
443La première recherche renvoie une liste ; la seconde sélectionne un dictionnaire à l'intérieur.
limits = {"search": {"retries": 2, "timeout": 30}}
limits["search"]["retries"] += 1
print(limits["search"]["retries"])
print(limits["search"]["timeout"])Sortie :
3
30Seul le paramètre de tentatives change.
jobs = [{"name": "index", "done": True}, {"name": "backup", "done": False}]
for job in jobs:
if job["done"]:
print(f"Finished: {job['name']}")Sortie :
Finished: indexLa variable de boucle est déjà un dictionnaire ; aucun indice numérique supplémentaire n'est requis.
settings = {"thresholds": {"api": 0}}
thresholds = settings.get("thresholds", {})
print(thresholds.get("api", 10))
print(thresholds.get("worker", 10))Sortie :
0
10Un zéro stocké est préservé, mais une clé manquante utilise la valeur de repli.
| Objectif | Exemple |
|---|---|
| Lire un champ imbriqué | data["jobs"][0]["status"] |
| Mettre à jour un champ imbriqué | data["limits"]["api"] = 5 |
| Itérer sur des enregistrements | for record in records: |
| Lire un dictionnaire imbriqué facultatif | data.get("limits", {}) |
| Préserver un zéro stocké | limits.get("api", 10) |
for record in records n'est pas un indice numérique.data["missing"] lève KeyError lorsqu'une clé est absente.dict.get("key") or default remplace à tort des valeurs falsy valides telles que 0.