
本文介绍如何将一个字典(含标量均值)的对应键值,从另一个字典(含数值列表)的每个列表元素中逐项相减,生成新字典,适用于手动计算标准差等场景。
本文介绍如何将一个字典(含标量均值)的对应键值,从另一个字典(含数值列表)的每个列表元素中逐项相减,生成新字典,适用于手动计算标准差等场景。
在统计计算(如标准差推导)中,常需先计算各观测值与均值的偏差:即对每个货币代码(如 'AUD'、'USD'),用其均值(来自 dict1)减去该货币对应的多个原始观测值(来自 dict2 的列表)。关键前提是两个字典具有完全一致的键集,且操作需严格按键对齐。
以下为推荐的简洁、高效实现方式(使用字典推导式):
dict1 = {'AUD': 1.55453513945, 'CAD': 1.3458501245, 'EUR': 0.97729005765, 'PKR': 289.48832734625, 'USD': 1.0}
dict2 = {'AUD': [1.6090702789, 1.5], 'CAD': [1.451700249, 1.24], 'EUR': [0.9645801153, 0.99], 'PKR': [278.9766546925, 300], 'USD': [1, 1]}
# ✅ 推荐写法:遍历 dict2 的键值对,对每个列表元素减去 dict1 中同键的标量
dict3 = {key: [val - dict1[key] for val in vals] for key, vals in dict2.items()}
运行后得到:
{
'AUD': [0.05453513945000003, -0.05453513945000003],
'CAD': [0.10585012450000003, -0.10585012450000003],
'EUR': [-0.012709942349999993, 0.012709942349999993],
'PKR': [-10.51167265375, 10.51167265375],
'USD': [0.0, 0.0]
}
⚠️ 注意事项:
- 键一致性是前提:若
dict2中存在dict1没有的键(或反之),上述写法会抛出KeyError。生产环境中建议先校验键交集:common_keys = dict1.keys() & dict2.keys() dict3 = {k: [v - dict1[k] for v in dict2[k]] for k in common_keys}- 精度控制:如需保留特定小数位(如示例中期望的
0.055、-0.0545),可在列表推导中加入round():dict3 = {key: [round(val - dict1[key], 4) for val in vals] for key, vals in dict2.items()}- 避免原地修改:该方案始终生成全新字典
dict3,不改变dict1或dict2,符合函数式编程习惯与数据安全要求。
此方法逻辑清晰、性能优异,是 Python 中处理“键对齐字典-列表逐元素运算”的标准实践,可直接用于后续方差、标准差的手动计算流程。










