EDIT:
Jawaban ini tidak akan berfungsi untuk Python3 dan akan memberikan RuntimeError
.
RuntimeError: kamus berubah ukuran saat iterasi.
Ini terjadi karena mydict.keys()
mengembalikan iterator bukan daftar. Seperti yang ditunjukkan dalam komentar cukup mengkonversi mydict.keys()
ke daftar oleh list(mydict.keys())
dan itu harus berfungsi.
Tes sederhana di konsol menunjukkan Anda tidak dapat memodifikasi kamus saat iterating di atasnya:
>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> for k, v in mydict.iteritems():
... if k == 'two':
... del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
Seperti yang dinyatakan dalam jawaban delnan, menghapus entri menyebabkan masalah ketika iterator mencoba untuk pindah ke entri berikutnya. Sebagai gantinya, gunakan keys()
metode untuk mendapatkan daftar kunci dan bekerja dengan itu:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Jika Anda perlu menghapus berdasarkan nilai item, gunakan items()
metode ini sebagai gantinya:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}