Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration

摘要:
删除属性值为None forkeyinresult:delresult[key]continue的属性,但错误消息如下:RuntimeError:dictionary changedsizeuringintation#字典在迭代期间更改字典的大小。Python同时遍历dict或set类型,并在遍历时更改变量的长度或修改变量。在迭代期间不能添加或删除属性,
    # result 是一个字典, 把里面属性值是None的属性删除  
    for key in result:  
        if not result[key]:  
            del result[key]  
            continue  

但是报错信息如下

Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration第1张

RuntimeError: dictionary changed size during iteration   # 字典在迭代的时候改变了字典大小 

 python 遍历一个dict、set类型的同时,并且在改变这个变量的长度或者一边遍历一边修改,这时候就会抛出这错误;

 我查了一些资料之后, 才发现用for in 迭代的时候是用迭代器的, (或许是个链表?), 不能在迭代的时候添加或删除属性, 只能更改属性值. (具体原理我也不太懂, 那么我先把问题解决了吧)

我想了想, 解决办法有两种, 一种是把字典转为列表, 然后再增删; 或者我不遍历字典, 只遍历字典的属性名, 那么就避开了这个问题.根据需要, 我选择了后面一种, 我是这么干的

这个问题在Python2和Python3中都会出现;

如下是针对python2和python3关于此类方法解决的思路:

# python2中遍历 dictVar.keys(),返回一个列表,从而得到一个列表,这样可以一边遍历列表一遍修改字典;

# 但是这个方法在python3中无法使用,因为这时候按照遍历 dictVar.keys(),返回一个迭代器而不再是一个列表,所以这个时候把字典作为参数放到list方法内,这样才能返回一个列表;

Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration第2张

请看下图解决方法:

Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration第3张

免责声明:文章转载自《Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux进程间通信-信号量解决虚拟机网络重启后连不上的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[Linux] XShell 远程 Ubuntu 云主机,图形化界面打开Chrome

命令 首先在windows本地安装XShell、Xmanager,并在XShell连接属性中选择X11转发 安装图形界面: sudo apt install gnome-panel gnome-panel 安装Chrome: sudo add-apt-repository ppa:a-v-shkop/chromium sudo apt-get upate...

Linux串口通信之termios结构体说明

termios结构体中,该结构体一般包括如下的成员:tcflag_t c_iflag;      tcflag_t c_oflag;      tcflag_t c_cflag;      tcflag_t c_lflag;     cc_t     c_cc[NCCS];    其具体意义如下 c_iflag:输入模式标志,控制终端输入方式,具体参数如下...

memset函数及注意事项

  memset函数的原型为:void * memset(void *ptr,int value,size_t num);用于为地址ptr开始的num个字节赋值value。   memset函数的头文件为:C:<memory.h>或<string.h>    C++:<cstring>。   在用memset为申请的数组...

hsql整理

一、行转列的使用1、问题hive如何将a       b       1a       b       2a       b       3c       d       4c       d       5c       d       6变为:a       b       1,2,3c       d       4,5,6 2、数据test.txt...

selenium css 、xpath优先级

推荐的元素定位优先级 优先级最高:id 优先级其次:name 优先级再次:css 优先级更次:xpath 最多的,就是css 针对css和xpath的优先级做一个说明 1、css 是配合HTML工作的,是一种匹配模式定位, xpath是配合xml工作的,通过遍历的方式定位 两...

【Python】-NO.98.Note.3.Python -【Python3 解释器、运算符】

1.0.0 Summary Tittle:【Python】-NO.98.Note.3.Python -【Python3 解释器】 Style:Python Series:Python Since:2018-07-08 End:2018-07-08 Total Hours:30+ Degree Of Diffculty:5 Degree Of Mastery...