如何用递归基于给定键列表创建嵌套字典
遍历键列表创建嵌套字典的实现
问题背景
给定初始字典和键列表:
my_dict = {'root': {}} my_keys = ['foo', 'bar', 'lorem', 'ipsum']
需要生成如下嵌套字典:
my_dict = { 'root': { 'foo': { 'bar': { 'lorem': { 'ipsum': {} } } } } }
尝试递归实现时遇到逻辑瓶颈,以下是可行的递归和迭代两种实现方案。
递归实现
递归的核心是逐层深入处理键列表,每次处理一个键后进入下一层级继续处理剩余键:
def build_nested(current_dict, keys): # 键列表为空时终止递归 if not keys: return # 取出第一个待处理的键 current_key = keys[0] # 在当前层级字典中创建键,值为空字典 current_dict[current_key] = {} # 递归处理剩余的键,传入新的层级字典 build_nested(current_dict[current_key], keys[1:]) # 使用示例 my_dict = {'root': {}} my_keys = ['foo', 'bar', 'lorem', 'ipsum'] build_nested(my_dict['root'], my_keys) print(my_dict)
逻辑说明
- 递归终止条件:当
keys列表为空时,说明所有键已处理完成,直接返回。 - 每次取出列表的第一个键,在当前字典中创建该键并赋值为空字典。
- 将刚创建的空字典作为新的当前层级,递归调用函数处理剩下的键。
迭代实现
如果觉得递归逻辑绕,迭代方式更直观,通过跟踪当前层级逐步构建嵌套结构:
my_dict = {'root': {}} my_keys = ['foo', 'bar', 'lorem', 'ipsum'] # 从root对应的子字典开始,跟踪当前操作的层级 current_level = my_dict['root'] for key in my_keys: # 在当前层级创建键,值为空字典 current_level[key] = {} # 移动到下一层级,继续处理下一个键 current_level = current_level[key] print(my_dict)
逻辑说明
- 用
current_level变量记录当前正在操作的字典层级,初始指向my_dict['root']。 - 遍历每个键,在当前层级字典中创建该键并赋值为空字典。
- 将
current_level更新为刚创建的空字典,进入下一层级,直到所有键处理完毕。
内容的提问来源于stack exchange,提问作者Daniel Bailo
相关产品推荐
相关产品推荐

