แก้ไข:
คำตอบนี้จะไม่ทำงานสำหรับ Python3 RuntimeError
และจะให้
RuntimeError: พจนานุกรมเปลี่ยนขนาดระหว่างการวนซ้ำ
สิ่งนี้เกิดขึ้นเนื่องจากmydict.keys()
ส่งคืนตัววนซ้ำไม่ใช่รายการ ตามที่ระบุไว้ในความคิดเห็นเพียงแปลงmydict.keys()
เป็นรายการโดยlist(mydict.keys())
และควรจะทำงาน
การทดสอบอย่างง่ายในคอนโซลแสดงว่าคุณไม่สามารถแก้ไขพจนานุกรมได้ในขณะที่วนซ้ำมัน:
>>> 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
ตามที่ระบุไว้ในคำตอบของ delnan การลบรายการทำให้เกิดปัญหาเมื่อตัววนซ้ำพยายามย้ายไปยังรายการถัดไป ใช้keys()
วิธีการแทนเพื่อรับรายการคีย์และทำงานกับสิ่งนั้น:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
หากคุณต้องการลบตามค่าไอเท็มให้ใช้items()
เมธอดแทน:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}