Python字典值减法运算代码无效求助(用于手动计算标准差)
问题排查与解决:生成差值字典
需求说明
要生成新字典dict3,其中每个键对应的列表元素是dict2中该键的列表值减去dict1对应键的单个值,后续用于手动计算标准差。
给定数据
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]}
用户问题代码
用户编写的代码未执行减法操作,返回原字典:
for SD_key, SD_values in SD_dictionary.items(): for SD_value in SD_values: if SD_dictionary[key]==dictionary_mean[key]: SD_dictionary[value]= SD_dictionary[value]-dictionary_mean[value] print(SD_dictionary)
问题分析
- 变量名不匹配:代码中用了
SD_dictionary、dictionary_mean,但实际给定的变量是dict1、dict2,变量名混乱导致逻辑完全不对应。 - 判断条件无效:
SD_dictionary[key]==dictionary_mean[key]中,前者是列表、后者是单个数值,永远不可能相等,减法操作根本不会触发。 - 赋值逻辑错误:
SD_dictionary[value]中的value未定义,而且直接修改原字典也不符合生成新字典的需求。
正确实现代码
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]} dict3 = {} for key in dict1: # 计算每个元素与dict1对应值的差,保留4位小数匹配示例格式 dict3[key] = [round(val - dict1[key], 4) for val in dict2[key]] print(dict3)
代码说明
- 遍历
dict1的所有键(确保和dict2的键一一对应) - 用列表推导式对
dict2的每个列表元素,计算其与dict1对应键值的差值,并用round保留4位小数,和预期示例格式一致 - 将结果存入新字典
dict3,不会修改原有的dict1和dict2
运行结果
{'AUD': [0.0545, -0.0545], 'CAD': [0.1059, -0.1059], 'EUR': [-0.0127, 0.0127], 'PKR': [-10.5117, 10.5117], 'USD': [0.0, 0.0]}
内容的提问来源于stack exchange,提问作者A K
相关产品推荐
相关产品推荐

