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

Python如何从字典中选取多个指定键值并计算对应数值的平均值?

字典多键取值计算总平均值的问题排查与实现

前置测试字典定义

test = {
    "name": "test",
    "a": [50,60,80,90], 
    "b": [40,68,67,89],
    "c": [44,55,67,78] 
}

此前尝试的错误原因逐一说明

  • 匹配k == 'a, b, c'的写法:将整段带逗号的字符串当成单个键做匹配,字典中不存在对应键值,永远无法命中判断分支。
  • 匹配k == 'a' and 'b' and 'c'的写法:受Python短路求值规则影响,该表达式等价于(k == 'a') and bool('b') and bool('c'),后两个非空字符串恒为真,因此只有键为'a'时会触发判断,完全不会处理b、c键的内容。
  • 匹配k == 'a' + 'b' + 'c'的写法:字符串拼接后实际是匹配不存在的键'abc',没有对应输出符合预期。
  • 匹配if k == 'a', 'b', 'c':的写法:不符合Python语法规范,直接触发语法报错。

正确实现方案

核心逻辑:先明确需要取值的目标键范围,将对应键下的所有列表元素汇总为统一数值列表,再计算总平均值。

  1. 通用遍历写法(适配需要遍历字典所有项的场景)
# 定义需要提取数值的目标键集合
target_keys = {'a', 'b', 'c'}
total_nums = []
for k, v in test.items():
    # 判断当前键是否属于目标范围
    if k in target_keys:
        # 将当前键对应的列表元素合并到总数值列表
        total_nums.extend(v)

# 计算总平均值并保留两位小数
total_avg = round(sum(total_nums) / len(total_nums), 2)
print(f"a/b/c键对应所有数值的总平均值为:{total_avg}")

运行输出:a/b/c键对应所有数值的总平均值为:65.67
2. 高效简写写法(无额外遍历需求时使用)
不需要遍历字典的所有无关键,直接按目标键提取数值,代码更简洁、执行效率更高:

target_keys = ['a', 'b', 'c']
# 生成器扁平化提取所有目标键下的数值
total_nums = [num for key in target_keys for num in test[key]]
total_avg = round(sum(total_nums) / len(total_nums), 2)
print(total_avg)

注意:该实现计算的是所有原始数值的算术平均值,和“每个键单独计算平均值后再求平均”的逻辑存在本质区别:如果不同键对应的列表长度不一致,两种计算方式的结果会出现偏差,需根据实际业务需求选择对应逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 11:15:00