"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-12
Parcourir:395

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 dans Python.

Modifier un dictionnaire lors d'une itération 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.

Solution Python 3

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

# Python 3 or higher

for k in list(mydict.keys()):
    if mydict[k] == 3:
        del mydict[k]

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

Solution Python 2

Dans 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 :

# Python 2

for k, v in mydict.items():
    if v == 3:
        del mydict[k]

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

for k in mydict.keys():
    if mydict[k] == 3:
        del mydict[k]

Approche alternative

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

for k in list(mydict.keys()):
    if k == 3:
        mydict.pop(k)

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3