Python 3辞書操作エラーの遍歴クエリー

867 ワード

昨日LeetCodeで1つの問題をタッチしたとき、辞書のkeyを検索する必要があることに遭遇しました.その結果、次のようなエラーが発生しました.
RuntimeError: dictionary changed size during iteration
エラーのコードセグメントは次のとおりです.
        for j in ans.keys():  #    ans  
            if (j not in ans_temp): #                
                del ans[j]
            else:   #          ,          ,    value     ans   
                if (ans.get(j) > ans_temp.get(j)):
                    ans[j] = ans_temp.get(j)
なぜなら、辞書を巡る過程で辞書の要素をdel操作し、辞書のsizeが変化し、エラーが発生したためです.
修正方法は、辞書をリストに変更し、辞書ではなくリストを巡ります.コードは次のとおりです.
for j in list(ans.keys()): 
どうしてそうするの?
ans.keys()は反復器(iteration)を返すため、遍歴中に削除操作を行うと例外がトリガーされますが、listに変換すると問題ありません.
要約すると、削除を繰り返すときに、オブジェクトは反復器を使用しないでください.
完全なコードとタイトルはGitHubを参照してください.
https://github.com/Ricky-Hu5918/Python-Lab/blob/master/Find_Common_Characters.py