如何实现从嵌套字典生成逐个移除单个键的字典列表?
问题:生成移除单个键的嵌套字典列表
场景需求
需要遍历一个嵌套JSON对象(Python字典),返回一个字典列表,每个字典都是原字典移除任意一个键后的副本,原始数据结构未知。
当前进展
已经编写了一个递归函数可以遍历并打印对象中的所有键值对,但这不是需要的功能。
函数定义要求
- 函数接收一个
dict类型参数,返回dict列表 - 列表中的每个元素都是原字典移除一个键后的副本:原字典有N个键(包括所有嵌套层级的键),就返回N个对应移除单个键的字典
- 如果被移除的键包含嵌套值,需一并移除,例如移除根键后会得到空字典
现有代码
def iterate_keys(data: dict): # 目前只做到这一步 for key, value in data.items(): if type(value) in [dict, ]: iterate_keys(value) elif type(value) in [list, ]: for item in value: if type(item) in [dict]: iterate_keys(item) print(key, value) # def what_i_really_want(data: dict) -> list: # return [dict1, dict2, ...] if __name__ == '__main__': test_dict = { "a": "a", "c": { "c1": [ {"c11": "c11"}, {"c12": "c12"}, ] }, } iterate_keys(test_dict)
期望输出
对于上述test_dict,理想返回结果如下:
result_should_be = [ { # 移除了"a" "c": { "c1": [ {"c11": "c11"}, {"c12": "c12"}, ] } }, # 移除了"c11" { "a": "a", "c": { "c1": [ {"c12": "c12"}, ] } }, # 移除了"c12" { "a": "a", "c": { "c1": [ {"c11": "c11"}, ] } }, # 移除了"c1" { "a": "a", "c": {} }, # 移除了"c" { "a": "a" }, ]
最终用途
实现该功能用于生成一系列测试用例。
内容的提问来源于stack exchange,提问作者lulian
相关产品推荐
相关产品推荐

