Wenn Sie nach dem kleinsten Wert im Wörterbuch suchen, können Sie dies tun:
%Vor%Wenn du min nicht verwenden kannst, kannst du sorted:
verwenden %Vor% Nebenbei bemerkt, der Grund dafür, dass Sie Runtime Error
haben, ist, dass Sie in der inneren Schleife den Iterator ändern, auf dem Ihre äußere Schleife basiert. Wenn Sie mit pop
einen Eintrag erreichen, der von der äußeren Schleife noch erreicht werden soll und der äußere Iterator diesen erreicht, versucht er auf ein entferntes Element zuzugreifen, wodurch der Fehler verursacht wird.
Wenn Sie versuchen, Ihren Code auf Python 2.7 (statt 3.x) auszuführen, erhalten Sie tatsächlich ein Key Error
.
Wenn Sie ein iterables in einer Schleife basierend auf seinem Iterator ändern möchten, sollten Sie ein tiefe Kopie davon.
Sie können copy.deepcopy verwenden, um eine Kopie des Originaldiktats zu erstellen und eine Schleife über die Kopie zu erstellen während die ursprüngliche ändern.
%Vor%Ihr Problem besteht darin, über etwas zu iterieren, das Sie ändern.
Versuchen Sie in Python3
%Vor%1 weitere Sache sollte vorsichtig sein, wenn ein Diktat wiederholt wird, um seinen Schlüssel zu aktualisieren:
Code1:
%Vor%Code2:
%Vor%Ergebnis von code1 / code2 ist:
%Vor%Mein Weg zur Lösung dieses unerwarteten Ergebnisses:
%Vor%Link: Ссылка
Zeichnen Sie den Schlüssel während der Schleife auf, und führen Sie nach Beendigung der Schleife dictionary.pop (key) aus. So:
%Vor%Hier ist eine Möglichkeit, es zu lösen:
Hier ist ein Beispiel:
%Vor%Die geheime Soße hier ist in der sortierten () Funktion: anstatt nach Schlüsseln zu sortieren, sortieren wir nach Werten.
Wenn Sie nur den Schlüssel mit dem kleinsten Wert behalten möchten, würde ich dies tun, indem Sie zuerst dieses Element finden und dann ein neues Wörterbuch erstellen, das nur dieses enthält. Wenn Ihr Wörterbuch d
wäre, würde so etwas in einer Zeile vorkommen:
Dadurch werden nicht nur Probleme beim Aktualisieren des Wörterbuchs beim Iterieren vermieden, es ist wahrscheinlich schneller als das Entfernen aller anderen Elemente.
Wenn Sie die Änderungen aus irgendeinem Grund vor Ort vornehmen müssen, würde Folgendes funktionieren, da vor dem Ändern des Wörterbuchs eine Kopie aller Schlüssel erstellt wird:
%Vor% Wenn ich jetzt Ihre Schleife lese, möchten Sie nur das kleinste Element behalten, aber ohne min
. Also, tun Sie das Gegenteil von dem, was Ihr Code jetzt tut, prüfen Sie, ob value1 < minValueSoFar
, wenn ja, keep1 als minKeySoFar. Dann am Ende der Schleife (wie Zayatzz vorgeschlagen hat), machen Sie dictionary.pop(minKeySoFar)
Nebenbei bemerkt, ist der key1!=key
-Test irrelevant und rechenintensiv, wenn man eine relativ lange Liste annimmt.
Tags und Links python dictionary