Próbuję upuścić elementy ze słownika, jeśli wartość klucza jest poniżej pewnego progu. Prosty przykład na to, co mam na myśli:Usuwanie elementów ze słownika z pętlą for
my_dict = {'blue': 1, 'red': 2, 'yellow': 3, 'green': 4}
for color in my_dict:
threshold_value = 3
if my_dict[color] < threshold_value:
del my_dict[color]
print(my_dict)
Teraz pojawia się błąd RuntimeError: dictionary changed size during iteration
. Bez wielkich niespodzianek. Powodem jestem delegowania na to pytanie brzmi:
Sprawdzaj, czy jest eleganckie rozwiązanie, które nie wymaga tworzenia nowego słownika (która posiada tylko klucze z wartości> = próg).
Spróbuj zrozumieć rozumowanie Pythona. Sposób, w jaki go przeczytam to: "przejdź do pierwszego klawisza. Czy wartość tego klucza to < x? Jeśli tak - prześlij ten klucz: wartość i przejdź do następnego klawisza w słowniku, jeśli nie - kontynuuj następny klucz bez robienia czegokolwiek ". Innymi słowy, to, co stało się historycznie z poprzednimi kluczami, nie powinno mieć wpływu na to, dokąd pójdę dalej. Z niecierpliwością czekam na kolejne przedmioty, niezależnie od przeszłości. Wiem, że to zabawne (niektórzy mogą powiedzieć głupi, dam ci to), ale jaki jest "sposób myślenia" Pythona na temat tej pętli? Dlaczego to nie działa? W jaki sposób Python odczytałby go na głos? Po prostu staramy się uzyskać lepsze zrozumienie języka ...
, jak powiedziałem w PO, nie chcę tworzyć nowego dyktatu. – Optimesh
Prosiłeś o elegancki sposób. Ale możesz zaprogramować, co chcesz. – Daniel