字典在迭代期间改变大小

时间:2012-11-27 21:40:33

标签: python dictionary python-3.x iteration

我查看了有关此主题的答案数据库,但找不到答案,本质上我正在循环翻译字典,我得到了“字典更改大小”,运行时错误但我正在弹出输出一个键和值,并在迭代恢复之前插入另一个键。

       for patterns in dict_copy.keys():
            new_tuple = ()
            for items in range(len(patterns)):
                if patters[items] not in exclusion:
                    new_tuple += (patterns[items],)
            dict_copy[new_tuple] = dict_copy.get(patterns)
            dict_copy.pop(patterns)

我正在使用的词典格式为:{(“A”,“B”,“C”,“D”):4,(“B”,“A”,“C”,“ D“)”2 ...} 我只是对它认为我正在修改字典大小的事实感到困惑

2 个答案:

答案 0 :(得分:1)

该错误略有误导。它试图告诉你的是,在迭代dict时你不应该进行任何结构改变(插入/删除)。

解决此问题的一种简单方法是将结果放入单独的字典中:

   new_dict = {}
   for patterns in dict_copy.keys():
        new_tuple = ()
        for items in range(len(patterns)):
            if patters[items] not in exclusion:
                new_tuple += (patterns[items],)
        new_dict[new_tuple] = dict_copy.get(patterns)
   dict_copy = new_dict

答案 1 :(得分:1)

  

我正在弹出一个键和值,然后插入另一个键   迭代重新开始。

那没关系。迭代时无法更改数据结构。 Python的迭代器变得混乱( - :它不是字典的大小,而是它的内容。 (在其他编程语言中也是如此......)