Maison > développement back-end > Tutoriel Python > Comment éviter \'RuntimeError : la taille du dictionnaire a changé pendant l'itération\' en Python ?

Comment éviter \'RuntimeError : la taille du dictionnaire a changé pendant l'itération\' en Python ?

Mary-Kate Olsen
Libérer: 2024-11-02 20:06:30
original
544 Les gens l'ont consulté

How to Avoid

Gérer les itérations du dictionnaire pour éviter les erreurs d'exécution

Itérer dans les dictionnaires en Python peut présenter des défis, en particulier lors de la modification de leur contenu. L'erreur « RuntimeError : le dictionnaire a changé de taille pendant l'itération » se produit lorsque la taille d'un dictionnaire change lors d'une itération, rendant l'itération invalide.

Interprétation du problème :

Considérez le scénario dans lequel vous disposez d'un dictionnaire de listes et souhaitez supprimer les paires clé-valeur avec des listes de valeurs vides :

<code class="python">d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}</code>
Copier après la connexion

Pour y parvenir, vous pouvez tenter le bloc de code suivant :

<code class="python">for i in d:
    if not d[i]:
        d.pop(i)</code>
Copier après la connexion

Cependant, cette approche déclenche l'erreur susmentionnée.

Cause et solution :

L'erreur se produit car l'itération sur un dictionnaire en Python est un processus en un seul passage. Les modifications apportées à la taille ou au contenu du dictionnaire au cours de cette itération peuvent entraîner un comportement imprévisible et des résultats incohérents. Pour contourner cette limitation, vous pouvez utiliser des techniques alternatives :

1. Utiliser une liste pour forcer la copie des clés :

Dans Python 2.x et 3.x, vous pouvez créer une liste des clés du dictionnaire sur lesquelles parcourir au lieu de parcourir directement le dictionnaire. Cela garantit un ensemble de clés cohérent quelles que soient les modifications apportées au dictionnaire lors de l'itération :

<code class="python">for i in list(d):</code>
Copier après la connexion

2. Utilisez la méthode .keys() (Python 2.x uniquement) :

Dans Python 2.x, l'appel de .keys() crée une copie des clés du dictionnaire. Ainsi, vous pouvez parcourir cette copie tout en modifiant le dictionnaire d'origine :

<code class="python">for i in d.keys():</code>
Copier après la connexion

Notez que cette approche n'est pas recommandée dans Python 3.x, car .keys() renvoie un objet de vue qui reflète les modifications apportées. au dictionnaire, conduisant potentiellement à des résultats imprévisibles.

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