You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用递归计算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
修正方案

你的递归函数存在两个核心问题:

  1. 递归返回值错误:计算完总大小后返回了原字典而非累加得到的size,导致递归调用无法正确汇总子键的大小。
  2. 缺少结果收集逻辑:原函数仅针对单个键计算,没有遍历所有键并生成符合格式的结果字典。

以下是正确的递归实现:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:30:51