如何用高效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
相关产品推荐
相关产品推荐

