python - 如果键等于给定键,如何删除嵌套字典中的所有键
问题描述
我有一个动态更新的嵌套字典,所以我永远不知道有多少级别。我需要做的是删除字典中等于给定键的所有条目,例如“命令”。
我试过循环遍历字典,但我发现级别数在运行时会发生变化,所以这不起作用。我在想也许这应该使用递归,但如果可以的话,我想避免这种情况。我已经包含了一个模拟字典的样本,我想要的是所有要删除的 = 命令的键。
data = {
'id': 1,
'name': 'Option 1',
'command': do_something,
'sub_opt': {
'id': 10,
'name': 'Sub Option',
'command': do_something_more,
'sub_sub_opt': {
'id': 100,
'name': 'Sub Sub Option',
'command': do_something_crazy,
}
}
}
解决方案
我知道您试图避免递归,但代码并不是那么糟糕。这是一个例子。(我将“命令”键的值更改为字符串。)
def delete(data, key):
data.pop(key, None)
for k, v in data.items():
if isinstance(v, dict):
delete(v, key)
delete(data, 'command')
print(data)
{'id': 1, 'name': 'Option 1', 'command': 'do_something', 'sub_opt': {'id': 10, 'name': 'Sub Option', 'command': 'do_something_more', 'sub_sub_opt': {'id': 100, 'name': 'Sub Sub Option', 'command': 'do_something_crazy'}}}
{'id': 1, 'name': 'Option 1', 'sub_opt': {'id': 10, 'name': 'Sub Option', 'sub_sub_opt': {'id': 100, 'name': 'Sub Sub Option'}}}
推荐阅读
- javascript - Textarea 不会保存条目
- objective-c - 以编程方式在 Watch App 上看不到图像
- php - 在 Woocommerce 中检查产品类别的购物车项目
- c# - Linking selenium with electron framework (c#)
- javascript - Copy text with new lines to clipboard
- javascript - LocalStorage 表列排序
- html - 在选择选项上隐藏元素
- docker - 频道创建失败
- java - Get unique elements in array without collections
- firebase - 如何检查 Firebase 安全性是否配置良好以避免数据窃取?