Python字典遍历 未遍历所有元素
Posted 软件工程小施同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python字典遍历 未遍历所有元素相关的知识,希望对你有一定的参考价值。
不能在遍历的时候往字典中新增、删除元素!!!
下面是我的python脚本,它需要遍历所有具有逻辑路径和直接磁盘的物理磁盘
如果我们找到了任何逻辑路径,那么我们得到了相应的物理磁盘,然后我们移除了逻辑部分,并将其对应的物理磁盘添加到检查字典中
check=
"/dev/disks/DISK2": "",
"/dev/disks/DISK4": "",
"/dev/disks/DISK5": "",
"/dev/disks/DISK1": "",
"/dev/disks/DISK6": "",
"/dev/disks/DISK3": "",
"/dev/sda": "/dev/sda"
logical_paths=
"/dev/disks/DISK2": "/ dev / sdc1",
"/dev/disks/DISK4": "/ dev / sdd2",
"/dev/disks/DISK5": "/ dev / sde1",
"/dev/disks/DISK1": "/dev/sdb4"
for a in check.keys():
print("*****")
print("disk is:"+a)
if a in logical_paths:
check[logical_paths[a]]=check[a]
check.pop(a,None)
print("####")
print(check)
但我的脚本的输出是:
*****
disk is:/dev/oracleasm/disks/DISK2
*****
disk is:/dev/oracleasm/disks/DISK4
*****
disk is:/dev/oracleasm/disks/DISK5
*****
disk is:/dev/oracleasm/disks/DISK1
*****
disk is:/ dev / sdc1
*****
disk is:/ dev / sdd2
*****
disk is:/ dev / sde1
*****
disk is:/dev/sdb4
为什么它要穿越disk6、disk3和SDA
对dict进行迭代时修改了它。这导致了底层结构的变化。如果您想明确地看到这一点,可以注释掉check.pop(a),然后您将得到一个错误RuntimeError: dictionary changed size during iteration。简而言之,您应该避免在迭代时修改dict的键。有关问题的详细解释,请参见:Modifying a Python dict while iterating over it
可以把新增、删除操作封装到另外一个函数中,然后使用循环调用该函数,实现遍历
以上是关于Python字典遍历 未遍历所有元素的主要内容,如果未能解决你的问题,请参考以下文章