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

如何将两个列表转为含重复键多值的字典?问题排查与修复

问题排查与代码修正

原代码存在的问题

  • 切换新键时,未将当前元素对应的list2[i]加入values列表:比如遇到第一个'B'时,values被重置为空列表,没有把list2[2](也就是3)加进去,导致最终'B'对应的列表只有4。
  • 循环结束后,未处理最后一组键值对:原循环只在遇到不同键时才将之前的键值对存入字典,循环结束后最后一组('C'和'D')没有被添加,导致'C'的值为空,'D'直接缺失。

修正后的代码

list1 = ['A', 'A', 'B', 'B', 'C', 'D']
list2 = [1, 2, 3, 4, 5, 6]

values = [list2[0]]
key = list1[0]
dic = {}
for i in range(1, len(list1)):
    if list1[i] == list1[i - 1]:
        values.append(list2[i])
    else:
        dic[key] = values
        # 切换新键时,初始化values为当前元素对应的值
        values = [list2[i]]
        key = list1[i]
# 循环结束后,添加最后一组键值对
dic[key] = values
print(dic)

更简洁的优化写法(使用collections.defaultdict)

如果允许使用标准库,可以用defaultdict简化逻辑,无需手动处理初始值和最后一组的问题:

from collections import defaultdict

list1 = ['A', 'A', 'B', 'B', 'C', 'D']
list2 = [1, 2, 3, 4, 5, 6]

result = defaultdict(list)
for k, v in zip(list1, list2):
    result[k].append(v)

# 若需要转为普通字典(可选)
result = dict(result)
print(result)

运行上述代码后,输出均符合预期:

{'A': [1, 2], 'B': [3, 4], 'C': [5], 'D': [6]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:05:49