我得到了运行时错误:字典在迭代期间改变了大小。Python

2024-05-12 14:34:52 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的示例代码:

def clean(record):

    record.pop('configurable_fields')
    record.pop('applied_discounts')
    record.pop('product_options')

    for key, value in record.items():
        if value is None:
            record.pop(key)

    return record

我得到这个错误:

^{pr2}$

我尝试了一些我在其他线程中找到的解决方案复制.deecopy,但到目前为止没有一个有效。在


Tags: key代码clean示例fieldsforvaluedef
2条回答

使用

for key, value in list(record.items()):

而不是

^{pr2}$

这样,可以“冻结”要迭代的项列表。record.items()是一个仍保留对原始dict的引用的生成器。list(record.items())是一个独立的列表。在

为了避免在迭代期间更改dict大小,可以返回一个新dict:

def clean(record):

    record.pop('configurable_fields')
    record.pop('applied_discounts')
    record.pop('product_options')

    return {k: v for k, v in record.items() if v is not None}

相关问题 更多 >