Wie vermeide ich „RuntimeError: Wörterbuchgröße während der Iteration geändert' in Python?

Mary-Kate Olsen
Freigeben: 2024-11-02 20:06:30
Original
517 Leute haben es durchsucht

How to Avoid

Wörterbuchiterationen verwalten, um Laufzeitfehler zu verhindern

Das Durchlaufen von Wörterbüchern in Python kann eine Herausforderung darstellen, insbesondere wenn deren Inhalte geändert werden. Der Fehler „RuntimeError: Größe des Wörterbuchs während der Iteration geändert“ tritt auf, wenn sich die Größe eines Wörterbuchs während der Iteration ändert, wodurch die Iteration ungültig wird.

Probleminterpretation:

Berücksichtigen Sie Folgendes Szenario, in dem Sie über ein Wörterbuch mit Listen verfügen und Schlüssel-Wert-Paare mit leeren Wertelisten entfernen möchten:

<code class="python">d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}</code>
Nach dem Login kopieren

Um dies zu erreichen, können Sie den folgenden Codeblock versuchen:

<code class="python">for i in d:
    if not d[i]:
        d.pop(i)</code>
Nach dem Login kopieren

Dieser Ansatz löst jedoch den oben genannten Fehler aus.

Ursache und Lösung:

Der Fehler tritt auf, weil die Iteration über ein Wörterbuch in Python ein Single-Pass-Prozess ist. Änderungen an der Größe oder dem Inhalt des Wörterbuchs während dieser Iteration können zu unvorhersehbarem Verhalten und inkonsistenten Ergebnissen führen. Um diese Einschränkung zu umgehen, können Sie alternative Techniken nutzen:

1. Verwenden Sie eine Liste, um das Kopieren von Schlüsseln zu erzwingen:

In Python 2.x und 3.x können Sie eine Liste der Schlüssel des Wörterbuchs erstellen, über die iteriert werden soll, anstatt direkt über das Wörterbuch zu iterieren. Dies stellt einen konsistenten Schlüsselsatz sicher, unabhängig von Änderungen, die während der Iteration am Wörterbuch vorgenommen wurden:

<code class="python">for i in list(d):</code>
Nach dem Login kopieren

2. Verwenden Sie die .keys()-Methode (nur Python 2.x):

In Python 2.x erstellt der Aufruf von .keys() eine Kopie der Schlüssel des Wörterbuchs. Sie können also über diese Kopie iterieren, während Sie das ursprüngliche Wörterbuch ändern:

<code class="python">for i in d.keys():</code>
Nach dem Login kopieren

Beachten Sie, dass dieser Ansatz in Python 3.x nicht empfohlen wird, da .keys() ein Ansichtsobjekt zurückgibt, das alle vorgenommenen Änderungen widerspiegelt zum Wörterbuch, was möglicherweise zu unvorhersehbaren Ergebnissen führt.

Das obige ist der detaillierte Inhalt vonWie vermeide ich „RuntimeError: Wörterbuchgröße während der Iteration geändert' in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage