python字典遍歷刪除 - dictionary changed size during iteration

我今天用python遍歷一個字典, 我想檢測字典中屬性值爲None的部分, 如果檢測到就把這個屬性刪除, 那麼我是這麼幹的

# result 是一個字典, 我想把裏面屬性值是None的屬性刪除
for key in result:
	if not result[key]:
		del result[key]
		continue

結果就報錯了

RuntimeError: dictionary changed size during iteration   # 字典在迭代的時候改變了字典大小


好吧, 我遇到這也懵逼了, 我查了一些資料之後, 才發現用for in 迭代的時候是用迭代器的, (或許是個鏈表?), 不能在迭代的時候添加或刪除屬性, 只能更改屬性值. (具體原理我也不太懂, 那麼我先把問題解決了吧)


我想了想, 解決辦法有兩種, 一種是把字典轉爲列表, 然後再增刪; 或者我不遍歷字典, 只遍歷字典的屬性名, 那麼就避開了這個問題.根據需要, 我選擇了後面一種, 我是這麼幹的

for key in result.keys(): # 由 result 變爲 result.keys()
	if not result[key]:
		del result[key]
		continue
然後就成功了, 嘿嘿


以上!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章