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

Python合并两列表为字典时如何实现重复键值累加

问题描述

需求是将两个列表(一个存储字符串作为字典键,一个存储整数作为字典值)合并为字典,重复键对应的数值需要执行累加求和。
测试用例信息:

  • 键列表:stringlist = ["EL1", "EL2", "EL1", "EL3", "El4"]
  • 值列表:integerlist = [1, 2, 12, 4, 5]
  • 预期结果:键EL1对应值为13,即该键匹配到的1和12累加的结果
    原有实现代码如下:
resultdictionary = {}
for key in appfinal:
    for value in amountfinal:
        resultdictionary[key] = value
        amountfinal.remove(value)
        break

该逻辑遇到重复键会直接覆盖旧值,最终EL1只会保留最后一次匹配到的12,不符合累加要求,且遍历过程中修改原列表容易引发元素匹配错乱。

正确实现方法

基础原生写法(无需引入额外库)

直接通过zip同步配对两个列表同位置的键和值,遍历过程中判断键是否已存在:存在则在原有值基础上累加,不存在则初始化赋值。

stringlist = ["EL1", "EL2", "EL1", "EL3", "El4"]
integerlist = [1, 2, 12, 4, 5]
resultdictionary = {}

for key, val in zip(stringlist, integerlist):
    if key in resultdictionary:
        resultdictionary[key] += val
    else:
        resultdictionary[key] = val

运行后得到的结果为{'EL1': 13, 'EL2': 2, 'EL3': 4, 'El4': 5},完全符合预期。

简化写法(借助collections模块)

使用defaultdict可以省去手动判断键是否存在的步骤,代码更简洁:

from collections import defaultdict

stringlist = ["EL1", "EL2", "EL1", "EL3", "El4"]
integerlist = [1, 2, 12, 4, 5]
resultdictionary = defaultdict(int)

for key, val in zip(stringlist, integerlist):
    resultdictionary[key] += val

# 需要普通字典类型时直接强转即可
resultdictionary = dict(resultdictionary)

注意事项:zip会按位置一一配对两个列表的元素,若两个列表长度不一致,会以较短的列表长度为准截断配对。原有嵌套循环+遍历中修改原列表的写法时间复杂度为O(n²),还容易出现元素漏匹配问题,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:45:37