如何基于键列表递归生成嵌套字典,现有实现无法得到预期输出
嵌套字典递归生成问题解决方案
原函数问题点
- 递归调用时始终传入同一个
check_dict对象,没有为每一级键创建新的空字典,导致所有层级的修改都作用在同一个字典实例上 - 把递归返回的完整字典直接赋值给当前键,会产生多余的嵌套层级
check_dict和size属于冗余参数,不需要外部传入,函数内部可自行处理
修正后的递归函数实现
def nested_dict(keys_list, value): # 递归终止条件:只剩最后一个键,直接返回对应键值对的字典 if len(keys_list) == 1: return {keys_list[0]: value} # 递归逻辑:当前键对应的值,为剩余键列表生成的嵌套字典 return {keys_list[0]: nested_dict(keys_list[1:], value)}
调用测试
list1 = ['info', 'websites', 'site'] result = nested_dict(list1, 'check') print(result) # 输出符合预期:{'info': {'websites': {'site': 'check'}}}
如果需要保留原函数的参数设计,只需要调整递归传参逻辑,每次为下一级创建新的空字典即可:
def nested_dict(keys_list, value, check_dict=None, size=None): # 初始化默认参数 if check_dict is None: check_dict = {} if size is None: size = len(keys_list) if size != 1: next_dict = {} check_dict[keys_list[0]] = next_dict # 把新的空字典传入下一级递归 nested_dict(keys_list[1:], value, next_dict, size-1) return check_dict else: check_dict[keys_list[0]] = value return check_dict
内容的提问来源于stack exchange,提问作者Ron Fisher
相关产品推荐
相关产品推荐

