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