Python中如何将字典的列表值转换为求和后的单个int或float
问题根源
你最初的实现代码中,给sum(item)额外套了一层方括号[],才会生成单元素列表作为字典值,属于多余操作。
最佳实现方案
推荐生成字典时一步完成,使用Python字典推导式实现,代码简洁且效率最优,无需后续二次处理:
TypeSum = {key: sum(value_list) for key, value_list in ID_TypeDict.items()}
运行后得到的结果就是你需要的格式:{2: 1.0, 3: 1.0, 4: 2.0}
额外说明
原修改代码不生效的原因
你后续遍历修改的代码中,对临时变量val直接赋值只是修改了该变量的指向,并没有修改原字典中存储的真实值,因此不会生效。如果非要在生成字典后再修改,正确写法如下(不推荐,多了一次遍历开销):
for key in TypeSum: TypeSum[key] = TypeSum[key][0]
效率对比
两种实现的时间复杂度本质都是O(N)(N为所有列表的总元素数),但一步生成的方式没有多余的中间对象创建和二次遍历操作,代码可读性也更高,是更符合Python最佳实践的写法。
内容的提问来源于stack exchange,提问作者PCMitchell
相关产品推荐
相关产品推荐

