Suppression d'éléments d'un dictionnaire lors d'une itération en Python
Lorsque vous travaillez avec des dictionnaires en Python, il peut y avoir des cas où vous devez supprimer des éléments qui remplissent des critères spécifiques lors de l’itération. Bien qu'intuitivement, il puisse sembler qu'une itération directe sur le dictionnaire et la suppression des éléments rencontrés suffiraient, cette approche est problématique.
Défis liés à la suppression directe pendant l'itération
Dans Python 3, la suppression directe d'éléments d'un dictionnaire lors d'une itération dessus génère une RuntimeError. En effet, la modification de la taille du dictionnaire pendant l'itération entraîne un dysfonctionnement de l'itérateur.
Dans Python 2, cette approche de suppression directe entraîne une erreur si l'élément à supprimer est l'élément suivant dans la séquence d'itération.
Solutions
Pour supprimer en toute sécurité des éléments d'un dictionnaire lors d'une itération, voici les solutions recommandées :
Python 3 :
Convertissez les clés du dictionnaire en liste en utilisant list(mydict.keys()) avant l'itération. Cela vous permet de parcourir la liste tout en apportant des modifications au dictionnaire :
<code class="python">for k in list(mydict.keys()): if mydict[k] == 3: del mydict[k]</code>
Python 2 :
Utilisez les méthodes key() ou items() pour créez respectivement une liste de clés ou de tuples de paires clé-valeur. Vous pouvez ensuite parcourir ces listes en toute sécurité pour supprimer des éléments sans perturber l'itérateur :
<code class="python">for k in mydict.keys(): if k == 'two': del mydict[k]</code>
<code class="python">for k, v in mydict.items(): if v == 3: del mydict[k]</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!