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

合并含重复键的列表为字典时代码失效,求正确实现方法

解决重复键生成字典的问题

首先要明确:你期望的{1: 1, 2, 2:3}不符合Python字典的语法规范——字典的键必须唯一,同一个键不能对应多个独立的值。正确的做法是将重复键对应的所有值存入一个列表,最终得到{1: [1, 2], 2: [3]}这样的结构。

你的代码报错的原因有两个:

  1. 未提前初始化dictionary1字典;
  2. 当键不存在时直接调用append()会触发KeyError,因为字典中还没有该键对应的列表对象。

下面是几种可行的实现方案:

方案一:手动判断键是否存在

keys = [1, 1, 2]
values = [1, 2, 3]
dictionary1 = {}

for k, v in zip(keys, values):
    if k not in dictionary1:
        dictionary1[k] = []
    dictionary1[k].append(v)

print(dictionary1)  # 输出: {1: [1, 2], 2: [3]}

方案二:使用collections.defaultdict(推荐)

借助defaultdict可以自动为不存在的键创建指定类型的默认值(这里是列表),代码更简洁:

from collections import defaultdict

keys = [1, 1, 2]
values = [1, 2, 3]
dictionary1 = defaultdict(list)

for k, v in zip(keys, values):
    dictionary1[k].append(v)

# 若需要转为普通字典,执行 dict(dictionary1)
print(dict(dictionary1))  # 输出: {1: [1, 2], 2: [3]}

方案三:使用字典的setdefault方法

setdefault方法会检查键是否存在,不存在则设置默认值并返回,存在则直接返回对应值,可简化循环逻辑:

keys = [1, 1, 2]
values = [1, 2, 3]
dictionary1 = {}

for k, v in zip(keys, values):
    dictionary1.setdefault(k, []).append(v)

print(dictionary1)  # 输出: {1: [1, 2], 2: [3]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:30:44