如何对两个同键不同字典的指定末尾值求和并生成新字典?
解决两个字典同键列表末尾数值求和/相乘的问题
问题分析
你需要基于两个字典中相同键对应的列表,保留dict1列表的前序元素,将最后一个数值替换为两个列表末尾数值的和(或乘积),同时避免直接覆盖原有值。
代码实现
首先定义你的原始字典:
dict1 = {'Manubar': ['string', 'string2', 'string3', 222, 23, 45], 'Schorsch': ['string', 'string2', 'string3', 122, 65, 44]} dict2 = {'Manubar': ['string', 'string2', 543, 21, 34], 'Schorsch': ['string', 'string2', 354, 10, 65]}
求和版本
dict3 = {} # 遍历两个字典的共同键(假设键完全一致,若有差异可改用dict1.keys() & dict2.keys()) for key in dict1: # 复制dict1的列表,避免修改原数据 result_list = dict1[key].copy() # 替换最后一个元素为两个列表末尾数值的和 result_list[-1] = dict1[key][-1] + dict2[key][-1] dict3[key] = result_list print(dict3) # 输出: # {'Manubar': ['string', 'string2', 'string3', 222, 23, 79], 'Schorsch': ['string', 'string2', 'string3', 122, 65, 109]}
相乘版本
只需把求和的+替换为*:
dict3 = {} for key in dict1: result_list = dict1[key].copy() result_list[-1] = dict1[key][-1] * dict2[key][-1] dict3[key] = result_list print(dict3) # 输出: # {'Manubar': ['string', 'string2', 'string3', 222, 23, 1530], 'Schorsch': ['string', 'string2', 'string3', 122, 65, 2860]}
关键说明
- 使用
list.copy()复制列表:避免直接修改dict1中的原始列表数据。 - 通过
[-1]访问列表末尾元素:无论列表长度如何,都能精准获取最后一个数值。 - 处理键不一致的情况:如果两个字典的键不完全重叠,可改用
common_keys = dict1.keys() & dict2.keys(),仅遍历共同键,避免KeyError。
内容的提问来源于stack exchange,提问作者Jay Jericho
相关产品推荐
相关产品推荐

