python - 如何从多维(深度未知)python字典中递归删除每个键?
问题描述
我正在尝试通过检索字典以从字典中删除每个键来测试服务器是否在参数丢失时正常:
data = {'a':'b','c':'d','e':{'aa':'bb'}}
for i in range(len(data)):
print "removed ans:",dict(data.items()[:i] + data.items()[i+1:])
答案是这样的:
removed ans: {'c': 'd', 'e': {'aa': 'bb', 'cc': 'dd'}}
removed ans: {'a': 'b', 'e': {'aa': 'bb', 'cc': 'dd'}}
removed ans: {'a': 'b', 'c': 'd'}
但我还需要删除“e”中的每个项目:
removed ans: {'c': 'd', 'e': {'aa': 'bb', 'cc': 'dd'}}
removed ans: {'a': 'b', 'e': {'aa': 'bb', 'cc': 'dd'}}
removed ans: {'a': 'b', 'c': 'd'}
removed ans: {'c': 'd', 'e': {'cc': 'dd'}}
removed ans: {'a': 'b', 'e': {'aa': 'bb'}}
我想我需要在一个函数中做到这一点,但是
如何在函数中每次返回不同的答案?
我怎样才能去多维字典?
解决方案
这可以通过递归生成器函数来完成:
def remove_next_key(my_dict):
for key, val in my_dict.items():
new_dict = dict(my_dict)
if isinstance(val, dict):
for nested_dict in remove_next_key(val):
new_dict[key] = nested_dict
yield new_dict
new_dict.pop(key)
yield new_dict
start_dict = {'a':'b','c':'d','e':{'aa':'bb', 'cc': 'dd'}}
for sub_dict in remove_next_key(start_dict):
print(sub_dict)
输出:
{'c': 'd', 'e': {'aa': 'bb', 'cc': 'dd'}}
{'a': 'b', 'e': {'aa': 'bb', 'cc': 'dd'}}
{'a': 'b', 'c': 'd', 'e': {'cc': 'dd'}}
{'a': 'b', 'c': 'd', 'e': {'aa': 'bb'}}
{'a': 'b', 'c': 'd'}
推荐阅读
- amazon-web-services - 测试是否触发了 AWS EventBridge(或 CloudWatch)事件
- java - spring boot 如何从 application.properties 读取值?
- dart - Flutter Dart 和 Chewie
- arrays - 我不能在 Google 电子表格中将 FILTER 与 ARRAYFORMULA 一起使用
- r - 想要在 R 编程中创建用户定义的函数,用于将数据拆分为训练和测试,并从函数返回样本、训练和测试
- c - 将字符串数组传递给函数并使用 malloc
- security - 由于极简主义导致的中等严重性漏洞
- python - 抓取亚马逊交易第 40 页产品但获得 15 个产品
- java - 通过restTemplate发送两张图片到python flask api
- c# - TcpListener + TcpClient - 等待客户端在关闭前读取数据