我得到RuntimeError:字典在迭代期间改变了大小.蟒蛇

Fil*_*les 2 python dictionary

这是我的示例代码:

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
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Traceback (most recent call last):
  File "C:\Users\Filipe\Dropbox\code\bigAnalysis\finalized scripts\importer.py", line 76, in <module>
    process_file('allOrderProductsData')
  File "C:\Users\Filipe\Dropbox\code\bigAnalysis\finalized scripts\importer.py", line 73, in process_file
    process_line(line)
  File "C:\Users\Filipe\Dropbox\code\bigAnalysis\finalized scripts\importer.py", line 58, in process_line
    product_id = dump_record('package', clean(package))  # id of recently created record
  File "C:\Users\Filipe\Dropbox\code\bigAnalysis\finalized scripts\importer.py", line 40, in clean
    for key, value in record.items():
RuntimeError: dictionary changed size during iteration
Run Code Online (Sandbox Code Playgroud)

我尝试了一些我在其他线程中找到的解决方案,比如使用copy.deecopy,但到目前为止它们都没有.

shx*_*hx2 5

使用

for key, value in list(record.items()):
Run Code Online (Sandbox Code Playgroud)

代替

for key, value in record.items():
Run Code Online (Sandbox Code Playgroud)

这样,您"冻结"要迭代的项目列表.record.items()是一个仍然持有对原始字典的引用的生成器.list(record.items())是一个独立的清单.