import collections ht = collections.defaultdict(int) ht[0] = ht[1] = 1 x = 2 for ky in ht: if ht[ky + 1] == 0: do_something() #=> RuntimeError: dictionary changed size during iteration Python3ではループ中に対象の辞書のサイズが変化するとRuntimeErrorを投げます。collections.defaultdictも同じで、上記の例ではky = 1のときht[2]という未定義領域にアクセスした結果、ht[2] = 0と定義されてしまいます。そのためループ中に辞書のサイズが変化したとして例外になるのです。 collections.defaultdictは未定義領域に問答無用でアクセスできるという点でと