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

如何仅用字典推导式或函数式编程实现嵌套字典指定键值求和?

不用显式for循环,用函数式/字典推导式处理嵌套字典求和的方案

嘿,我太懂你搜不到纯函数式或字典推导式方案的苦恼了!之前我找类似方法的时候也发现相关资料不多,刚好针对你这个需求,整理了几种完全符合要求的实现方式,不用写传统的for循环就能搞定:

方法1:生成器表达式 + sum(最简洁高效)

这种写法用隐式的生成器遍历嵌套字典,既贴合函数式编程思路,又没有显式的for循环:

def get_grades(nested_dict, target_key):
    return sum(student_scores.get(target_key, 0) for student_scores in nested_dict.values())

说明:

  • nested_dict.values()拿到所有学生的成绩字典
  • 生成器表达式遍历每个学生字典,用get()方法安全获取目标键的值(避免不存在该键时报错,默认返回0)
  • 最后用sum()直接对所有目标值求和

方法2:map函数 + lambda(纯函数式风格)

如果你更倾向于纯函数式的写法,用map配合lambda也能完美实现:

def get_grades(nested_dict, target_key):
    return sum(map(lambda scores: scores.get(target_key, 0), nested_dict.values()))

说明:

  • map()把每个学生的成绩字典传入lambda函数,提取目标键对应的值
  • 再用sum()对map返回的迭代器中的数值求和

方法3:字典推导式配合sum(满足字典推导式需求)

如果一定要用到字典推导式,我们可以先生成一个包含目标值的临时字典,再对其值求和:

def get_grades(nested_dict, target_key):
    target_values = {name: scores.get(target_key, 0) for name, scores in nested_dict.items()}
    return sum(target_values.values())

说明:

  • 字典推导式遍历每个学生的键值对,生成以学生名为键、目标作业成绩为值的字典
  • 最后对这个字典的所有值求和

测试示例

用你给出的测试数据验证:

sample_dict = {'Ggg':{'hw1': 1, 'hw2': 2, 'hw3': 3},'Hhh':{'hw1': 4, 'hw2': 3,'hw3': 6}}
print(get_grades(sample_dict, 'hw1'))  # 输出:5
print(get_grades(sample_dict, 'hw3'))  # 输出:9

内容的提问来源于stack exchange,提问作者boosie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:39