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

如何遍历字典多键等长列表值,完成加权求和并适配未知键数?

用NumPy/Pandas处理动态键的字典加权求和问题

问题场景

给定两个字典:

my_dict1 = {'c1': [10, 11, 12], 'c2': [100, 110, 120], 'c3': [200, 210, 220]} 
my_dict2 = {'c1': 3, 'c2': 1, 'c3': 2}

其中my_dict1所有键对应的列表长度一致,需要完成以下计算:

  1. 遍历每个索引位置,计算该位置下所有键的列表元素与my_dict2对应键标量的乘积之和
  2. 将所有索引的求和结果相加后乘以0.5,最终公式为:
result = 0.5 * ([10 * 3 + 100 * 1 + 200 * 2] + [11 * 3 + 110 * 1 + 210 * 2] + [12 * 3 + 120 * 1 + 220 * 2])

要求方案支持未知数量键的实际业务场景,可使用NumPy或Pandas实现。


方法一:NumPy实现(高效数值计算)

通过数组转换与矩阵运算,自动适配任意数量的匹配键:

import numpy as np

my_dict1 = {'c1': [10, 11, 12], 'c2': [100, 110, 120], 'c3': [200, 210, 220]} 
my_dict2 = {'c1': 3, 'c2': 1, 'c3': 2}

# 提取共同键(实际业务中可添加键一致性校验)
keys = my_dict1.keys()
# 将my_dict1的列表转换为二维数组,转置后每行对应一个索引位置的所有元素
arr = np.array([my_dict1[k] for k in keys]).T
# 提取权重数组
weights = np.array([my_dict2[k] for k in keys])

# 计算每行加权和 → 求和所有行结果 → 乘以0.5
result = 0.5 * np.sum(arr @ weights)
print(result)  # 输出:841.0

核心逻辑:利用矩阵乘法@快速计算每行的加权和,整个流程无需硬编码键名,新增或减少键时代码无需修改。


方法二:Pandas实现(简洁易读)

借助DataFrame的广播特性,实现按列加权求和:

import pandas as pd

my_dict1 = {'c1': [10, 11, 12], 'c2': [100, 110, 120], 'c3': [200, 210, 220]} 
my_dict2 = {'c1': 3, 'c2': 1, 'c3': 2}

# 将my_dict1转换为DataFrame,每列对应一个键
df = pd.DataFrame(my_dict1)
# 将my_dict2转换为Series作为权重
weights = pd.Series(my_dict2)

# 按列加权 → 每行求和 → 所有行求和 → 乘以0.5
result = 0.5 * (df * weights).sum().sum()
print(result)  # 输出:841.0

核心逻辑:df * weights会自动按列名匹配权重,后续两次sum()分别完成行内求和与全局求和,代码简洁直观,适合需要数据可视化或后续分析的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:40:24