如何将不等长列表转换为以短列表为键的分组字典
不等长列表按短列表分组生成字典
给定两个不等长列表:
list1 = ['A', 'B', 'C'] list2 = [1, 2, 3, 4, 5, 6]
需要生成以短列表list1元素为键,长列表list2中循环对应分组的值为值的字典,最终结果如下:
master_dict = {'A': [1, 4], 'B': [2, 5], 'C': [3, 6]}
方法一:索引取模遍历分组
用collections.defaultdict自动初始化列表类型的值,遍历长列表时通过索引对短列表长度取模,匹配对应键并添加值:
from collections import defaultdict list1 = ['A', 'B', 'C'] list2 = [1, 2, 3, 4, 5, 6] master_dict = defaultdict(list) for idx, num in enumerate(list2): key = list1[idx % len(list1)] master_dict[key].append(num) # 转为普通字典(可选操作) master_dict = dict(master_dict) print(master_dict)
方法二:列表切片推导式
直接通过列表切片,为每个短列表元素提取长列表中对应步长的子列表,代码更简洁:
list1 = ['A', 'B', 'C'] list2 = [1, 2, 3, 4, 5, 6] group_len = len(list1) master_dict = {key: list2[i::group_len] for i, key in enumerate(list1)} print(master_dict)
两种方法均可得到目标结果,可根据使用习惯选择。
内容的提问来源于stack exchange,提问作者Robert Tuttle
相关产品推荐
相关产品推荐

