如何在不修改原字典的情况下移除嵌套字典中子键为空的父键?
在嵌套字典中移除包含空子键的父键(不修改原字典)
给定一个嵌套字典,需要移除所有包含指定空子键的父键,同时保留原字典不变,返回处理后的新字典。比如示例字典中,items下的键A因tags为空数组需要被移除。
解决方案代码
def remove_parent_key(original_dict, check_key): new_dict = {} for key, value in original_dict.items(): if isinstance(value, dict): # 检查当前子字典是否包含目标空键,是则跳过该父键 if check_key in value and value[check_key] in ('', [], {}, None): continue # 递归处理子字典,再加入新字典 processed_child = remove_parent_key(value, check_key) new_dict[key] = processed_child else: # 非字典类型的值直接保留 new_dict[key] = value return new_dict
使用示例
针对你提供的字典d,调用方式如下:
processed_d = remove_parent_key(d, 'tags')
此时原字典d完全不变,processed_d中的outer_key_1['items']将只保留键B。
逻辑说明
- 函数通过递归遍历原字典的所有层级,完全不修改原字典,而是从头构建一个新字典
- 遍历每个键值对时,若值是字典:
- 先判断该字典是否包含目标键
check_key,且对应值为空(空字符串、空列表、空字典、None),满足则跳过该键(即不加入新字典,实现移除) - 不满足则递归处理该子字典,将处理后的结果加入新字典
- 先判断该字典是否包含目标键
- 非字典类型的值直接复制到新字典中
内容的提问来源于stack exchange,提问作者PedroA
相关产品推荐
相关产品推荐

