如何用递归计算Python字典中每个键的总大小?
问题描述
给定如下格式的字典,每个键的总大小等于其对应列表的第一个值加上所有子键的总大小,需要用递归实现计算每个键的总大小:
dictionary = {'/': [23352670, ['a', 'd']], 'a': [94269, ['e']], 'e': [584, []], 'd': [24933642, []]}
期望输出:
{'/': [48381165], 'a': [94853], 'e': [584], 'd': [24933642]}
尝试的递归函数存在问题:
def recursion(dictionary, key): #base case list is empty if not dictionary[key][1]: return dictionary[key][0] else: size = dictionary[key][0] for child in dictionary[key][1]: size += recursion(dictionary, child) return dictionary
修正方案
你的递归函数存在两个核心问题:
- 递归返回值错误:计算完总大小后返回了原字典而非累加得到的
size,导致递归调用无法正确汇总子键的大小。 - 缺少结果收集逻辑:原函数仅针对单个键计算,没有遍历所有键并生成符合格式的结果字典。
以下是正确的递归实现:
def calculate_total_size(original_dict, key): # 基础情况:无子女键,直接返回自身大小 if not original_dict[key][1]: return original_dict[key][0] # 递归累加:自身大小 + 所有子键的总大小 total = original_dict[key][0] for child_key in original_dict[key][1]: total += calculate_total_size(original_dict, child_key) return total def build_result_dict(original_dict): result = {} for key in original_dict: result[key] = [calculate_total_size(original_dict, key)] return result # 测试运行 dictionary = {'/': [23352670, ['a', 'd']], 'a': [94269, ['e']], 'e': [584, []], 'd': [24933642, []]} print(build_result_dict(dictionary))
代码说明
calculate_total_size:专注递归计算单个键的总大小,基础情况直接返回自身值;递归时遍历所有子键,累加子键的递归计算结果。build_result_dict:遍历原字典的所有键,调用递归函数计算每个键的总大小,最终组装成符合要求的结果结构。
运行后输出与期望完全一致:
{'/': [48381165], 'a': [94853], 'e': [584], 'd': [24933642]}
内容的提问来源于stack exchange,提问作者kasper
相关产品推荐
相关产品推荐

