You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}

代码说明

  1. 集合转换:把target_list转为集合target_set,集合的成员查询时间复杂度为O(1),远快于列表的O(n),数据量越大优势越明显
  2. 字典推导式:遍历源字典的每个键值对,对每个值列表中的元素,统计存在于目标集合中的数量,直接生成新字典
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:45:33