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

Python作业求助:将含重复键的字典转换为值求和的列表

解决字典重复键值求和的问题

嘿,我懂你现在的困惑!你用字典推导式生成d2的时候,因为字典的键是唯一不可重复的,所以后面出现的重复键会直接覆盖前面的对应值,这就是为啥没法实现求和的原因啦~

方法一:基础循环判断

最直观的方式就是初始化一个空字典,然后遍历每一组索引和值,手动判断键是否存在来累加:

d1 = {'inds': [0, 3, 7, 3, 3, 5, 1], 'vals': [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]}
d2 = {}
for k, v in zip(d1["inds"], d1["vals"]):
    if k in d2:
        # 如果键已存在,就把当前值加到已有值上
        d2[k] += v
    else:
        # 如果键不存在,直接存入键值对
        d2[k] = v
print(d2)
# 输出:{0: 1.0, 3: 11.0, 7: 3.0, 5: 6.0, 1: 7.0}

方法二:用collections.defaultdict简化代码

Python的标准库collections里有个defaultdict,可以自动为不存在的键设置默认值,写起来更简洁:

from collections import defaultdict

d1 = {'inds': [0, 3, 7, 3, 3, 5, 1], 'vals': [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]}
# 初始化一个默认值为0.0的defaultdict
d2 = defaultdict(float)
for k, v in zip(d1["inds"], d1["vals"]):
    # 不管键是否存在,直接累加就行,不存在的话会自动用默认值0.0加v
    d2[k] += v
# 如果需要转换成普通字典,用dict()包裹即可
print(dict(d2))
# 输出和上面一样:{0: 1.0, 3: 11.0, 7: 3.0, 5: 6.0, 1: 7.0}

为啥原来的字典推导式不行?

字典推导式{k:v for k,v in zip(d1["inds"],d1["vals"])}在处理重复键时,只会保留最后一次出现的键值对。比如你的例子里,键3先后对应2.0、4.0、5.0,推导式最终只会把3对应的值设为最后一个5.0,自然没法实现求和啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:02:24