# result 是一個字典, 把里面屬性值是None的屬性刪除 for key in result: if not result[key]: del result[key] continue
但是報錯信息如下
RuntimeError: dictionary changed size during iteration # 字典在迭代的時候改變了字典大小
python 遍歷一個dict、set類型的同時,並且在改變這個變量的長度或者一邊遍歷一邊修改,這時候就會拋出這錯誤;
我查了一些資料之后, 才發現用for in 迭代的時候是用迭代器的, (或許是個鏈表?), 不能在迭代的時候添加或刪除屬性, 只能更改屬性值. (具體原理我也不太懂, 那么我先把問題解決了吧)
我想了想, 解決辦法有兩種, 一種是把字典轉為列表, 然后再增刪; 或者我不遍歷字典, 只遍歷字典的屬性名, 那么就避開了這個問題.根據需要, 我選擇了后面一種, 我是這么干的
這個問題在Python2和Python3中都會出現;
如下是針對python2和python3關於此類方法解決的思路:
# python2中遍歷 dictVar.keys(),返回一個列表,從而得到一個列表,這樣可以一邊遍歷列表一遍修改字典; # 但是這個方法在python3中無法使用,因為這時候按照遍歷 dictVar.keys(),返回一個迭代器而不再是一個列表,所以這個時候把字典作為參數放到list方法內,這樣才能返回一個列表;
請看下圖解決方法: