如何利用含重复键的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
相关产品推荐
相关产品推荐

