求助:用递归与循环实现水果仓储总吨数统计的问题
嵌套仓库水果总存储量统计问题解决方案
问题背景
需要编写函数统计Fruits Storage公司所有仓库(含各级分支)的水果总存储吨数,给定的仓库字典存在多层嵌套结构,既有直接存储水果列表的仓库,也包含嵌套分支的仓库。示例结构如下(已修正原代码的语法错误):
warehouses = { "Warehouse Lisboa": [ { "name": "apples", "tons": 4}, { "name": "oranges", "tons": 10}, { "name": "lemons", "tons": 50} ], "Warehouse Cascais": { "Branch 1": [ { "name": "apples", "tons": 10}, { "name": "oranges", "tons": 24} ], "Branch 2": [ { "name": "apples", "tons": 16}, { "name": "oranges", "tons": 8} ] }, "Warehouse Oeiras": { "Branch 1": { "Sub Branch 1":{ "Sub sub Branch 1": [ { "name": "lemons", "tons": 10} ] } } } }
原代码问题分析
提供的代码存在以下关键错误:
- 当遇到
list类型的值时,错误尝试直接获取warehouses["tons"],但list中的每个元素才是包含tons键的水果字典,需要遍历列表逐个累加 - 递归调用时未将返回的子分支吨数累加到总吨数中,导致分支数据被完全忽略
- 使用
type(...) == list判断类型不够灵活,推荐使用isinstance()以兼容继承场景
修正后的代码
def stock_fruits(warehouses): total_tons = 0 # 遍历当前层级的所有仓库/分支内容 for value in warehouses.values(): if isinstance(value, list): # 遍历水果列表,累加每个水果的吨数 for fruit in value: total_tons += fruit["tons"] elif isinstance(value, dict): # 递归处理嵌套分支,累加子分支的总吨数 total_tons += stock_fruits(value) return total_tons
代码逻辑说明
- 初始化
total_tons变量,用于存储当前层级及所有子层级的总吨数 - 遍历当前字典的所有值(无需关注键名,只需处理存储内容)
- 若值为
list,说明这是具体的水果库存列表,遍历每个水果字典提取tons值并累加 - 若值为
dict,说明这是嵌套的分支结构,递归调用函数处理该分支,并将返回的子分支总吨数累加到total_tons - 最终返回统计完成的总吨数
测试验证:调用stock_fruits(warehouses)会得到结果132,与手动计算的4+10+50+10+24+16+8+10一致。
内容的提问来源于stack exchange,提问作者premier401
相关产品推荐
相关产品推荐

