如何计算多层嵌套字典中所有'tons'字段的总和?
统计多层嵌套字典中所有'tons'字段的总和
给定层级结构不固定的warehouses字典,需要提取所有tons字段的数值总和。原代码直接调用sum(warehouses.values())会抛出TypeError: unsupported operand type(s) for +: 'int' and 'list',因为字典的值包含列表、嵌套字典等非数值类型,sum无法直接处理。
解决方法:递归遍历嵌套结构
由于字典的层级不固定,使用递归方式遍历所有嵌套元素,提取tons值累加是最灵活的方案:
def calculate_total_tons(data): total = 0 if isinstance(data, dict): # 检查当前字典是否包含'tons'字段 if 'tons' in data: total += data['tons'] # 递归处理字典的所有值 for value in data.values(): total += calculate_total_tons(value) elif isinstance(data, list): # 递归处理列表中的每个元素 for item in data: total += calculate_total_tons(item) return total # 测试代码 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} ] } }, "Branch 2": [ { "name": "apples", "tons": 3} ] } } print(calculate_total_tons(warehouses)) # 输出:135
代码说明
- 递归逻辑:函数会逐层遍历所有嵌套的字典和列表:
- 遇到字典时,先检查是否有
tons键,有则累加对应数值;再递归处理字典的每个值 - 遇到列表时,遍历列表中的每个元素,递归处理每个元素
- 其他非容器类型(如字符串、数字)直接返回0,不影响总和
- 遇到字典时,先检查是否有
- 结果验证:所有
tons值的总和为4+10+50+10+24+16+8+10+3=135,与代码输出一致。
内容的提问来源于stack exchange,提问作者Manuel Carvalhinha
相关产品推荐
相关产品推荐

