如何将整数列表与元组对列表转为一对多映射字典?
构建元组对到多k值列表的字典
方法1:普通字典循环实现
先初始化空字典,遍历kVals和pairSet的对应元素,逐个将k值追加到对应元组的列表中:
# 示例输入数据 kVals = [1, 7, 13, 19, 2, 8] pairSet = [(2,1), (2,1), (2,1), (2,1), (3,2), (3,2)] pair_to_ks = {} for k, pair in zip(kVals, pairSet): if pair not in pair_to_ks: pair_to_ks[pair] = [] pair_to_ks[pair].append(k) # 验证结果 print(pair_to_ks[(2,1)]) # 输出: [1, 7, 13, 19]
方法2:使用collections.defaultdict简化代码
借助defaultdict可以省去判断键是否存在的步骤,直接追加元素:
from collections import defaultdict # 示例输入数据 kVals = [1, 7, 13, 19, 2, 8] pairSet = [(2,1), (2,1), (2,1), (2,1), (3,2), (3,2)] pair_to_ks = defaultdict(list) for k, pair in zip(kVals, pairSet): pair_to_ks[pair].append(k) # 可选:转换为普通字典 pair_to_ks = dict(pair_to_ks) # 验证结果 print(pair_to_ks[(2,1)]) # 输出: [1, 7, 13, 19]
两种方法核心逻辑一致:遍历kVals与pairSet的对应关系,将每个k值收集到对应元组的列表中,避免了直接用dict(zip(pairSet, kVals))时重复键覆盖旧值的问题。
内容的提问来源于stack exchange,提问作者user14513315
相关产品推荐
相关产品推荐

