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字典遍历 未遍历所有元素的主要内容,如果未能解决你的问题,请参考以下文章

Python字典集合结构详解

python:遍历列表并用相应的字典值替换元素

Python字典的遍历

Python字典遍历

Python基础语法

Python遍历字典的几种方式