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

如何利用含重复键的Key_list与Value_list生成指定结构的字典

合并键值列表为分组字典的实现方法

给定两个列表:

Key_list = [1,1,1,2,2,3]
Value_list = ['A','B','C','D','E','F']

需要将它们转换为如下结构的字典,相同键对应的多个值合并为列表:

D = {1:['A','B','C'],2:['D','E'],3:['F']}

以下是几种实用的实现方法:

方法1:基础循环实现

无需额外模块,手动完成字典的初始化与填充:

Key_list = [1,1,1,2,2,3]
Value_list = ['A','B','C','D','E','F']

D = {}
for key, val in zip(Key_list, Value_list):
    if key not in D:
        D[key] = []
    D[key].append(val)

print(D)  # 输出: {1: ['A', 'B', 'C'], 2: ['D', 'E'], 3: ['F']}

通过zip将两个列表的对应元素配对,遍历过程中检查键是否已存在,不存在则创建空列表,再将值追加到对应列表中。

方法2:使用collections.defaultdict简化代码

利用collections模块的defaultdict自动为不存在的键初始化空列表,减少冗余判断:

from collections import defaultdict

Key_list = [1,1,1,2,2,3]
Value_list = ['A','B','C','D','E','F']

D = defaultdict(list)
for key, val in zip(Key_list, Value_list):
    D[key].append(val)

# 可选:转为普通字典
D = dict(D)

print(D)  # 输出: {1: ['A', 'B', 'C'], 2: ['D', 'E'], 3: ['F']}

defaultdict(list)会在访问不存在的键时自动生成空列表作为默认值,省去手动判断键存在性的步骤。

方法3:使用itertools.groupby(适用于有序键列表)

如果Key_list是连续有序的(如题目中的情况),可以用itertools.groupby快速分组:

from itertools import groupby
from operator import itemgetter

Key_list = [1,1,1,2,2,3]
Value_list = ['A','B','C','D','E','F']

# 先配对键值,再按键分组
paired = zip(Key_list, Value_list)
D = {key: [val for _, val in group] for key, group in groupby(paired, key=itemgetter(0))}

print(D)  # 输出: {1: ['A', 'B', 'C'], 2: ['D', 'E'], 3: ['F']}

groupby仅对连续相同的键进行分组,因此要求键列表是有序的。通过字典推导式直接提取分组后的 value 列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:42:28