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

可以把新增、删除操作封装到另外一个函数中,然后使用循环调用该函数,实现遍历

猜你喜欢

转载自blog.csdn.net/u013288190/article/details/129021091
今日推荐