【问题标题】:Dictionary changes size during iteration字典在迭代期间改变大小
【发布时间】:2012-11-15 15:01:31
【问题描述】:

我查看了与该主题相关的答案数据库,但找不到答案,基本上我正在遍历字典,我收到“字典更改大小”运行时错误,但我正在弹出在迭代恢复之前取出一个键和值并插入另一个。

       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...} 我几乎只是对它认为我正在改变字典大小的事实感到困惑

【问题讨论】:

    标签: python dictionary python-3.x iteration


    【解决方案1】:

    这个错误有点误导。它试图告诉您的是,在迭代字典时,您不应该进行任何结构更改(插入/删除)。

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

       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
    

    【讨论】:

    • 我在想,但问题是我可能不得不回到这个循环来迭代 new_dict,在这种情况下它不会因为它设置为 dict_copy.keys() 编辑:因为这个循环是代码的后半部分,所以我的程序要做的是遍历新版本的 dict_copy.keys() 然后如果需要再次执行
    【解决方案2】:

    我弹出一个键和值并在 迭代继续。

    没关系。迭代时不能更改数据结构。 Python 的迭代器被混淆了(-:这不是关于字典的大小,而是它的内容。 (在其他编程语言中也是如此……)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2023-04-02
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多