【发布时间】:2021-07-26 04:04:12
【问题描述】:
我有一个这样的字典:
d={
'McAfee': {'DatDate': '123','DatVersion': '456'},
'AntiVirus': {'AVName': ['Mac Defender', 'Windows Defender'],'AVVersion': ['262144', '393472']}
}
现在我想根据这个映射改变 d 的键,也改变 d 的值的键:
mapping_table = {"McAfee":'Mc_table','AntiVirus':'An_table'}
mapping_coulmn = {'DatDate':"Dc_column",'AVName':'Av_column','DatVersion':'Da_column','AVVersion':'AVV_column'}
输出应该是这样的:
d={
'Mc_table': {'Dc_column': '123','Da_column': '456'},
'An_table': {'Av_column': ['Mac Defender', 'Windows Defender'],'AVV_column': ['262144', '393472']}
}
我累的是:
for key in d:
if key in mapping_table:
new_key = mapping_table[key]
d1[new_key]=d.pop(key)
print(d)
它返回一个错误:
RuntimeError: dictionary keys changed during iteration
有朋友可以帮忙吗?非常感谢!
【问题讨论】:
-
是否必须原地修改字典而不是返回新字典?
-
我不知道是谁编辑了这个问题并说它是重复的,它很相似但根本不重复,我要求编辑我的问题的人删除重复的标签!
-
为什么不是重复的?
d.pop(key)从字典中删除。另一个问题解释了如何在循环遍历字典时从字典中删除。 -
在那个问题中,这个人想删除密钥,但我想替换密钥,我的 dict 结构嵌套了他的不是。
-
无法直接替换密钥。您所能做的就是删除旧密钥并添加一个新密钥,这就是您正在做的事情。但是您不能在迭代时修改键。另一个问题提供了解决方案。
标签: python python-3.x dictionary key python-3.5