python - Python字典没有遍历所有元素
问题描述
下面是我的 python 脚本,它需要遍历所有具有逻辑路径的物理磁盘以及直接磁盘
如果我们找到任何logical_paths然后我们得到相应的物理磁盘然后我们删除逻辑部分并将其对应的物理磁盘添加到检查字典中
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
解决方案
只需list
从您的密钥创建一个,然后在创建的密钥列表之上进行迭代。
背景
你的问题是你dict
在迭代它时修改了你的。这导致底层结构的变化。如果你想明确地看到这一点,你可以注释掉check.pop(a)
然后你会得到一个错误RuntimeError: dictionary changed size during iteration
。简而言之,您应该避免dict
在迭代它们时修改键。有关您的问题的详细说明,请参阅:Modify a Python dict while iterate over it
固定代码
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 list(check):
print("*****")
print("disk is:"+a)
if a in logical_paths:
check[logical_paths[a]]=check[a]
check.pop(a)
print("####")
print(check)
输出:
*****
disk is:/dev/disks/DISK2
*****
disk is:/dev/disks/DISK4
*****
disk is:/dev/disks/DISK5
*****
disk is:/dev/disks/DISK1
*****
disk is:/dev/disks/DISK6
*****
disk is:/dev/disks/DISK3
*****
disk is:/dev/sda
####
{'/dev/disks/DISK6': '', '/dev/disks/DISK3': '', '/dev/sda': '/dev/sda', '/ dev / sdc1': '', '/ dev / sdd2': '', '/ dev / sde1': '', '/dev/sdb4': ''}
推荐阅读
- r - R中的数据框转换
- python-3.x - 如何将二维数据转换为具有单值时间的三维三维数据?
- excel - Excel的每小时版本备份可能使用Powershell
- java - Wildfly ContextService 并发 securityIdentity 为空
- javascript - 使用 NodeJS/npm 调用本地 JS 包
- c - 如何使用 cmake 包含来自另一个项目的标头
- pbs - 作业数组的 PBSPro qsub 输出文件名
- flutter - 如何计算小部件在颤动中的显示时间
- python - 无法使用 openpyxl 创建多个工作表
- java - 使用额外的 3rd 方插件运行 kafka 服务器,用于统计收集、日志记录等