[英]How to check whether a key exist inside a nested dictionary and if yes delete
我已经创建了这个main_dict
,想要查看main_dict[x]["Description"]
存在,如果是,则将其删除。 其中x
是'pins'
, 'nails'
, 'board'
等...
main_dict = {
'pins':
{
'Category': ['General'],
'Contact': ['Mark'],
'Description': ['This', 'is', 'a']
},
'nails':
{
'Category': ['specific'],
'Contact': ['Jon'],
'Description': ['This', 'is', 'a', 'description']
},
'board':
{
'Category': ['General'],
'Contact': ['Mark'],
'Description': ['This', 'is', 'a']
},
'hammer':
{
'Category': ['tools'],
'Contact': ['Jon'],
'Description': ['This', 'is', 'a', 'description']
}
}
我尝试了这个:
for x in main_dict:
del main_dict[x]["Description"]
如果main_dict[x]["Description"]
不存在,则返回错误。
同样这不起作用:
if main_dict[x]["Description"] in mainDict[x]:
del main_dict[x]["Description"]
您只需使用带有默认参数(例如None
)的pop()
方法来忽略检查是否存在"Description"
作为键。
for i in main_dict:
main_dict[i].pop("Description", None)
注意:在迭代过程中更改可迭代对象不是一个好习惯。
这是一个简单的解决方案:
for x in main_dict:
if "Description" in main_dict[x]:
main_dict[x].pop("Description")
要检查字典中if key in dict
请尝试if key in dict
来检查嵌套字典是否遵循相同的逻辑:
for key in main_dict:
if 'Description' in main_dict[key]:
# do something
关于删除元素,您确实应该使用del
语句 。 我复制了您的main_dict,并以与您相同的方式运行:
for x in main_dict:
del main_dict[x]['Description']
也许您要删除两次?
这会将其从包含它的所有子词典中删除:
main_dict = {
'pins':
{
'Category': ['General'],
'Contact': ['Mark'],
'Description': ['This', 'is', 'a']
},
'nails':
{
'Category': ['specific'],
'Contact': ['Jon'],
'Description': ['This', 'is', 'a', 'description']
},
'board':
{
'Category': ['General'],
'Contact': ['Mark'],
'Description': ['This', 'is', 'a']
},
'hammer':
{
'Category': ['tools'],
'Contact': ['Jon'],
'Description': ['This', 'is', 'a', 'description']
}
}
for key, value in main_dict.items():
if isinstance(value, dict) and 'Description' in value:
del value['Description']
结果:
{
'pins':
{
'Category': ['General'],
'Contact': ['Mark'],
},
'nails':
{
'Category': ['specific'],
'Contact': ['Jon'],
},
'board':
{
'Category': ['General'],
'Contact': ['Mark'],
},
'hammer':
{
'Category': ['tools'],
'Contact': ['Jon'],
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.