Maison  >  Article  >  développement back-end  >  Comment supprimer en toute sécurité des éléments d'un dictionnaire pendant une itération en Python ?

Comment supprimer en toute sécurité des éléments d'un dictionnaire pendant une itération en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 19:12:30852parcourir

How to Safely Delete Items from a Dictionary During Iteration in Python?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn