BIÊN TẬP:
Câu trả lời này sẽ không hoạt động cho Python3 và sẽ cung cấp cho RuntimeError
.
RuntimeError: từ điển thay đổi kích thước trong quá trình lặp.
Điều này xảy ra bởi vì mydict.keys()
trả về một iterator không phải là một danh sách. Như đã chỉ ra trong các bình luận chỉ cần chuyển đổi mydict.keys()
thành một danh sách list(mydict.keys())
và nó sẽ hoạt động.
Một thử nghiệm đơn giản trong bảng điều khiển cho thấy bạn không thể sửa đổi một từ điển trong khi lặp qua nó:
>>> 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
Như đã nêu trong câu trả lời của delnan, việc xóa các mục gây ra vấn đề khi iterator cố gắng chuyển sang mục tiếp theo. Thay vào đó, sử dụng keys()
phương thức để lấy danh sách các khóa và làm việc với nó:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Nếu bạn cần xóa dựa trên giá trị vật phẩm, hãy sử dụng items()
phương pháp thay thế:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}