Mengurus Lelaran Kamus untuk Mencegah Ralat Masa Jalan
Lelaran melalui kamus dalam Python boleh menimbulkan cabaran, terutamanya apabila mengubah suai kandungannya. Ralat "RuntimeError: kamus berubah saiz semasa lelaran" timbul apabila saiz kamus berubah semasa melelaran ke atasnya, menjadikan lelaran tidak sah.
Tafsiran Masalah:
Pertimbangkan senario di mana anda mempunyai kamus senarai dan ingin mengalih keluar pasangan nilai kunci dengan senarai nilai kosong:
<code class="python">d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}</code>
Untuk mencapai ini, anda boleh mencuba blok kod berikut:
<code class="python">for i in d: if not d[i]: d.pop(i)</code>
Walau bagaimanapun, pendekatan ini mencetuskan ralat yang dinyatakan di atas.
Punca dan Penyelesaian:
Ralat berlaku kerana lelaran ke atas kamus dalam Python ialah proses laluan tunggal. Perubahan pada saiz atau kandungan kamus semasa lelaran ini boleh membawa kepada tingkah laku yang tidak dapat diramalkan dan hasil yang tidak konsisten. Untuk memintas had ini, anda boleh menggunakan teknik alternatif:
1. Gunakan Senarai untuk Memaksa Penyalinan Kunci:
Dalam kedua-dua Python 2.x dan 3.x, anda boleh membuat senarai kekunci kamus untuk diulang dan bukannya terus ke atas kamus. Ini memastikan set kunci yang konsisten tanpa mengira sebarang pengubahsuaian yang dibuat pada kamus semasa lelaran:
<code class="python">for i in list(d):</code>
2. Gunakan Kaedah .keys() (Python 2.x sahaja):
Dalam Python 2.x, memanggil .keys() mencipta salinan kunci kamus. Oleh itu, anda boleh mengulangi salinan ini sambil mengubah suai kamus asal:
<code class="python">for i in d.keys():</code>
Perhatikan bahawa pendekatan ini tidak disyorkan dalam Python 3.x, kerana .keys() mengembalikan objek paparan yang mencerminkan sebarang perubahan yang dibuat ke kamus, yang berpotensi membawa kepada hasil yang tidak dapat diramalkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan \'RuntimeError: kamus berubah saiz semasa lelaran\' dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!