dictionary changed size during iteration

Python Erreur courante

Explication

L'erreur `RuntimeError: dictionary changed size during iteration` survient quand vous **ajoutez ou supprimez des clés** d'un dictionnaire **pendant** que vous le parcourez. Python interdit cette modification en cours d'itération car elle rendrait le parcours incohérent. ```python scores = {"a": 0, "b": 5, "c": 0} for cle in scores: if scores[cle] == 0: del scores[cle] # suppression pendant l'itération # RuntimeError: dictionary changed size during iteration ```

Causes courantes

- **Suppression de clés** (`del`, `.pop()`) dans une boucle `for ... in dict`. - **Ajout de clés** au dictionnaire pendant le parcours. - Le même problème existe avec les **sets** modifiés pendant l'itération.

1. Itérez sur une copie des clés

for cle in list(scores):        # list() fige les clés au départ
    if scores[cle] == 0:
        del scores[cle]          # ✅ on modifie l'original en toute sécurité

2. Construisez un nouveau dictionnaire (par compréhension)

Souvent plus clair et plus rapide :

scores = {cle: v for cle, v in scores.items() if v != 0}

3. Collectez d'abord, supprimez ensuite

a_supprimer = [cle for cle, v in scores.items() if v == 0]
for cle in a_supprimer:
    del scores[cle]

Comment prevenir cette erreur

- **Ne modifiez jamais** la taille d'un dictionnaire (ou d'un set) pendant que vous le parcourez. - **Préférez les compréhensions** pour filtrer : elles créent une nouvelle structure sans toucher à l'originale en cours de route. - Référence : [docs.python.org — Dictionnaires](https://docs.python.org/fr/3/library/stdtypes.html#dict).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Pourquoi `list(scores)` règle-t-il le problème ?
Parce que `list(scores)` crée une copie figée des clés *avant* la boucle. Vous itérez sur cette copie, ce qui vous laisse libre de modifier le dictionnaire original sans incohérence.
Le problème se pose-t-il aussi en modifiant seulement les valeurs ?
Non. Changer la **valeur** d'une clé existante (`scores[cle] = 1`) est autorisé pendant l'itération. Seul le changement de **taille** (ajout/suppression de clés) déclenche l'erreur.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.