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