首页 > 编程语言 >python中的报错:dictionary changed size during iteration

python中的报错:dictionary changed size during iteration

时间:2023-05-06 13:34:42浏览次数:44  
标签:dictionary 迭代 python items list 报错 del 字典

该报错是一个python中常见的错误,通常在使用for 循环迭代字典时删除其中的元素时出现。这个问题的根本原因在于迭代字典的同时修改了它,导致字典的大小发生了变化。

如下面的例子,就会报错:

d = {"a":1,"b":2,"c':3}

for k,v in d.items():
    if v == 2:
        del d[k]

上述代码中,就会产生错误!

为了解决这个问题,可以在迭代字典时,创建一个副本或者用另外一种方式实现需求。下面是一些解决的方法。

1.将字典转换为列表或者元组,然后再进行迭代,可以避免改变字典大小的问题。

d = {"a":1,"b":2,"c':3}

for k,v in list(d.items()):
    if v == 2:
        del d[k]

2.创建一个迭代副本而不是原来字典。我们这样可以安全地修改字典:

d = {"a":1,"b":2,"c':3}

for k,v in d.copy.items():
    if v == 2:
        del d[k]

3.将需要删除的元素添加到另外一个列表中,循环迭代完成后再对原始字典进行操作。

d = {"a":1,"b":2,"c':3}

list_a = []
for k,v in d.items():
    if v == 2:
        list_a.append(k)
for key in list_a:
    del d[key]

总之,为了避免出现“dictionary changed size during iteration” 错误,我们需要迭代和修改字典之间找到一种安全的方法。

 

标签:dictionary,迭代,python,items,list,报错,del,字典
From: https://www.cnblogs.com/shaoyishi/p/17376980.html

相关文章

  • 解决iframe嵌套不同域报错问题:SecurityError: Blocked a frame with origin
    Error:Failedtoresolveasynccomponentdefault:SecurityError:Blockedaframewithorigin"https://223.82.12.165:8282"fromaccessingacross-originframe. 原始需求,我提供一个免登陆的链接跳转到页面A。实现需求:用一个新的工程B实现权限校验,校验成功后通过loc......
  • 安装msi软件报错:The installer has encountered an unexpected error installing this
    因为安装权限不足以管理员身份运行cmd运行安装命令msiexec/package"E:\xxx\charles-proxy-4.6.4-win64.msi"......
  • 我在比较时序数据时,程序报错说数据标签有问题
    大家好,我是皮皮。一、前言前几天在Python白银群【黑白人生】问了一个Pandas数据处理的问题,这里拿出来给大家分享下。截图如下图所示:数据截图如下所示:二、实现过程这里【论草莓如何成为冻干莓】给了一个思路,如下所示:看上去还是有点深奥的。后来【瑜亮老师】也指导了一波。顺利的解决......
  • Python之路,Day21 - 常用算法学习
    本节内容算法定义时间复杂度空间复杂度常用算法实例 1.算法定义算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,......
  • Python之路,Day15 - Django适当进阶篇
    本节内容学员管理系统练习DjangoORM操作进阶用户认证 1.Django练习小项目:学员管理系统设计开发带着项目需求学习是最有趣和效率最高的,今天就来基于下面的需求来继续学习Django 项目需求:1.分讲师\学员\课程顾问角色,2.学员可以属于多个班级,学员成绩按课程分别统计3.每个......
  • python测试
    当你在写Python代码的时候,你希望确保它能够正常运行并返回正确的结果。这就是测试的重要性。在Python中,常用的测试框架是unittest。使用unittest,你可以写测试用例,这些测试用例可以测试你的代码是否按照预期方式工作。以下是一个简单的Python测试教程:1.导入unittest模块import......
  • python 创建虚拟环境以及数据迁移和.Django创建app
    一.python创建虚拟环境1.1首先要确认在那个位置创建虚拟环境创建命令virtualenv虚拟环境名称二.python数据迁移1.生成迁移文件pythonmanage.pymakemigrations2.同步到数据库中pythonmanage.pymigrate三.Django创建apppythonmanage.pystartappAPP名称......
  • 【Python】Beautiful Soup
    简介BeautifulSoup对象我全部使用soup表示;BeautifulSoup简介:简单来说,BeautifulSoup是python的一个库,最主要的功能是从网页抓取数据。1、创建BeautifulSoup对象1.1soup.prettify()frombs4importBeautifulSouphtml_content="""<html><head><title>TheDor......
  • Linux下搭建Python2.7环境
    Python(英语发音:/ˈpaɪθən/),是一种面向对象、解释型计算机程序设计语言,由1989年底发明。python具有简单、易学、免费、开源、可移植性、解释性、可嵌入性等特点,是一种不受局限、跨平台的开源编程语言,它功能强大且简单易学,因而得到了广泛应用和支持。1.Python下载Pyt......
  • Python多线程爬虫简单模板
    多线程爬虫的流程可以大致分为:(1)获取种子URL:从初始URL中抓取起始页面,解析其中的URL,并将这些URL添加到未访问的URL队列中;(2)解析下载的网页:从URL队列中取出一个URL,下载其内容,解析其中的链接,并把新的链接放入未访问的URL队列中;(3)存储爬取的数据:从URL队列中取出未访问的URL,把其中的内......