Saya telah memeriksa semua pertanyaan lain dengan kesalahan yang sama namun tidak menemukan solusi yang bermanfaat = /
Saya punya kamus daftar:
d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
di mana beberapa nilai kosong. Di akhir pembuatan daftar ini, saya ingin menghapus daftar kosong ini sebelum mengembalikan kamus saya. Saat ini saya mencoba melakukan ini sebagai berikut:
for i in d:
if not d[i]:
d.pop(i)
Namun, ini memberi saya kesalahan runtime. Saya menyadari bahwa Anda tidak dapat menambah / menghapus elemen dalam kamus saat iterasi melalui itu ... apa yang akan menjadi cara di sekitar ini?
sumber
keys
membuat salinan kunci yang dapat Anda lakukan berulang kali' aliasplural
kunci - kunci itu, kan? Kalau tidak, bagaimana orang bisa mengulanginya dengan satu kunci? Ngomong-ngomong, saya tidak memetiknya, saya benar-benar tertarik untuk mengetahui apakah itu memang kunci atau kuncifor i in d.keys()
sebenarnya bekerja di python 3.x secara umum , tetapi karena itu adalah iterating atas pandangan iterable dari kunci kamus, memanggild.pop()
selama loop mengarah ke kesalahan yang sama seperti yang Anda temukan.for i in list(d)
meniru perilaku python 2 yang sedikit tidak efisien menyalin kunci ke daftar sebelum iterasi, untuk keadaan khusus seperti milik Anda.list(d.keys())
menciptakan output yang sama sepertilist(d)
, menyerukanlist
padadict
pengembalian tombol. Thekeys
call (meskipun tidak mahal) tidak perlu.Cukup gunakan pemahaman kamus untuk menyalin item yang relevan ke dikt baru
Untuk ini dalam Python 3
sumber
d.iteritems()
memberi saya kesalahan.d.items()
Sebagai gantinya saya menggunakan - menggunakan python3Anda hanya perlu menggunakan "salin":
Dengan cara itu Anda mengulangi bidang kamus asli dan dengan cepat dapat mengubah dict yang diinginkan (d dict). Ini berfungsi pada setiap versi python, jadi lebih jelas.
sumber
Saya akan mencoba menghindari memasukkan daftar kosong di tempat pertama, tetapi, umumnya akan menggunakan:
Jika sebelum 2.7:
atau hanya:
sumber
Untuk Python 3:
sumber
Anda tidak dapat mengulangi melalui kamus saat itu berubah selama untuk loop. Buat casting untuk daftar dan beralih ke daftar itu, itu bekerja untuk saya.
sumber
Untuk situasi seperti ini, saya ingin membuat salinan dalam dan loop melalui salinan itu sambil memodifikasi dict asli.
Jika bidang pencarian ada di dalam daftar, Anda dapat menghitung dalam loop for the list dan kemudian menentukan posisi sebagai indeks untuk mengakses bidang dalam dict asli.
sumber
Ini bekerja untuk saya:
Casting item kamus ke daftar membuat daftar itemnya, sehingga Anda dapat mengulanginya dan menghindari
RuntimeError
.sumber
dictc = {"stName": "asas"} keys = dictc.keys () untuk kunci dalam daftar (kunci): dictc [key.upper ()] = Cetak 'nilai baru' (str (dictc))
sumber
Alasan untuk kesalahan runtime adalah bahwa Anda tidak dapat mengulangi melalui struktur data saat strukturnya berubah selama iterasi.
Salah satu cara untuk mencapai apa yang Anda cari adalah dengan menggunakan daftar untuk menambahkan kunci yang ingin Anda hapus dan kemudian menggunakan fungsi pop pada kamus untuk menghapus kunci yang diidentifikasi saat iterasi melalui daftar.
sumber
Python 3 tidak mengizinkan penghapusan saat iterasi (menggunakan untuk loop di atas) kamus. Ada berbagai alternatif untuk dilakukan; salah satu cara sederhana adalah mengubah baris berikut
Dengan
sumber