Python:统计列表元素在字典值中的出现次数并生成新字典
解决Python中统计列表值在字典值列表中出现次数的问题
问题分析
给定目标列表和源字典,需要统计每个字典键对应的列表中,有多少元素存在于目标列表中,最终生成键不变、值为统计次数的新字典。你原代码的问题在于:
- 遍历字典时,
value是完整的列表而非单个元素,value in list的判断逻辑完全错误 - 没有实现统计次数的逻辑,仅尝试写入键,不符合需求
正确解法
首先避免使用list、dict这类内置名称作为变量名,改用target_list和source_dict:
# 定义目标列表和源字典 target_list = [1,2,3,4,5,6,7,8,9] source_dict = { 1:[15,2,72,7,62,71,13,6,153,154,73,39], 2:[16,15,61,1,71,72,39,4,74,14,69,5], 3:[69,85,19,13,42,46,14,62,103,4,153,86], 4:[70,20,14,66,13,33,87,61,85,86,97,5], 5:[9,65,69,62,13,42,144,85,41,6,14,31] } # 优化:将列表转为集合,提升in操作的效率 target_set = set(target_list) # 用字典推导式生成新字典 new_dict = {key: sum(1 for num in value_list if num in target_set) for key, value_list in source_dict.items()} print(new_dict) # 输出:{1: 3, 2: 3, 3: 1, 4: 1, 5: 2}
代码说明
- 集合转换:把
target_list转为集合target_set,集合的成员查询时间复杂度为O(1),远快于列表的O(n),数据量越大优势越明显 - 字典推导式:遍历源字典的每个键值对,对每个值列表中的元素,统计存在于目标集合中的数量,直接生成新字典
- sum统计:用生成器表达式遍历值列表,符合条件的元素计数为1,sum累加得到总次数
如果需要将结果写入CSV文件,可修改为:
import csv with open('connection2.csv', 'w', newline='') as csv_file: writer = csv.writer(csv_file) # 写入表头(可选) writer.writerow(['key', 'count']) for key, count in new_dict.items(): writer.writerow([key, count])
内容的提问来源于stack exchange,提问作者jhone aish
相关产品推荐
相关产品推荐

