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