Python面試題目之(針對dict或者set數據類型)邊遍歷 邊修改 報錯dictionary changed size during iteration


 

    # 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方法內,這樣才能返回一個列表;

 

 

請看下圖解決方法:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM