如何将两个列表转为含重复键多值的字典?问题排查与修复
问题排查与代码修正
原代码存在的问题
- 切换新键时,未将当前元素对应的
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
相关产品推荐
相关产品推荐

