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

如何用高效Python方法从两个列表创建键唯一值求和的字典

嘿,这个需求我刚好碰到过,给你分享几个高效的实现方式,比普通for循环靠谱多了:

高效实现方案

方法一:使用collections.defaultdict(标准库首选)

这是Python标准库提供的工具,内部基于C优化,效率很高,代码也简洁:

from collections import defaultdict

l1 = ['a', 'b', 'c', 'c', 'a','a','d','b']
l2 = [2, 4, 6, 8, 10, 12, 14, 16]

sum_dict = defaultdict(int)
for key, value in zip(l1, l2):
    sum_dict[key] += value

# 可选:转成普通字典(如果不需要defaultdict的特性)
sum_dict = dict(sum_dict)
print(sum_dict)  # 输出: {'a': 24, 'b': 20, 'c': 14, 'd': 14}

defaultdict(int)会自动给不存在的键初始化为0,省去了手动判断键是否存在的步骤,比自己写if key in dict:的循环效率高不少。

方法二:使用pandas(大数据量场景首选)

如果你的数据量很大(比如百万级以上),用pandas的向量化分组操作会更高效,它底层用了优化的C扩展:

import pandas as pd

l1 = ['a', 'b', 'c', 'c', 'a','a','d','b']
l2 = [2, 4, 6, 8, 10, 12, 14, 16]

df = pd.DataFrame({'keys': l1, 'values': l2})
sum_dict = df.groupby('keys')['values'].sum().to_dict()
print(sum_dict)

这种方式的优势在数据量越大时越明显,适合处理大规模数据集。

方法三:原生dict的get方法(无需导入库)

如果不想依赖任何外部库,用原生字典的get方法也能实现高效累加,代码同样简洁:

l1 = ['a', 'b', 'c', 'c', 'a','a','d','b']
l2 = [2, 4, 6, 8, 10, 12, 14, 16]

sum_dict = {}
for key, value in zip(l1, l2):
    sum_dict[key] = sum_dict.get(key, 0) + value

print(sum_dict)

get(key, 0)会返回键对应的现有值,若键不存在则返回0,一行完成累加操作,比手动判断键存在性的循环效率高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:27:38