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

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

Linda Hamilton
Libérer: 2024-11-02 18:01:29
original
313 Les gens l'ont consulté

How to Safely Delete Items from a Dictionary While Iterating in Python?

Modification itérative du dictionnaire

Il est courant de devoir supprimer des éléments d'un dictionnaire tout en le parcourant simultanément. Cependant, cette opération n'est pas supportée nativement en Python.

Modifier un dictionnaire en itérant dessus peut entraîner des erreurs. Par exemple, l'extrait de code que vous avez fourni peut échouer dans Python 3 avec l'erreur :

RuntimeError: dictionary changed size during iteration.
Copier après la connexion

Solution Python 3

Dans Python 3, la solution consiste à créer une liste de clés du dictionnaire et parcourez cette liste à la place. Voici un exemple :

<code class="python"># Python 3 or higher

for k in list(mydict.keys()):
    if mydict[k] == 3:
        del mydict[k]</code>
Copier après la connexion

Cette approche fonctionne car une liste est immuable et ne sera pas affectée par les modifications apportées au dictionnaire.

Solution Python 2

En Python 2, la méthode keys() renvoie un itérateur, qui ne peut pas être modifié lors de l'itération. Pour modifier le dictionnaire, vous pouvez utiliser l'approche suivante :

<code class="python"># Python 2

for k, v in mydict.items():
    if v == 3:
        del mydict[k]</code>
Copier après la connexion

Dans Python 2, vous pouvez également convertir l'itérateur en liste :

<code class="python">for k in mydict.keys():
    if mydict[k] == 3:
        del mydict[k]</code>
Copier après la connexion

Approche alternative

Vous pouvez également utiliser la méthode pop() pour supprimer des éléments du dictionnaire lors d'une itération :

<code class="python">for k in list(mydict.keys()):
    if k == 3:
        mydict.pop(k)</code>
Copier après la connexion

Notez que cette approche est plus efficace car elle ne crée pas de liste supplémentaire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal