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

如何用Python读取Excel列数据,查找Value列重复值并优化现有脚本

原脚本存在的问题
  • 资源泄漏风险:未使用上下文管理器打开文件,运行出现异常时可能无法正常关闭文件句柄
  • 性能极低:多次调用list.count()方法+3次全量遍历数据集,时间复杂度为O(n²),数据量偏大时运行效率极差
  • 逻辑容错性差:将Name和Value拼接后再拆分的逻辑,遇到Name字段自带逗号的场景会直接出错
  • 输出不符合要求:最终输出的是一维列表,不是要求的「Value为键、对应Name数组为值」的字典结构
优化后代码
import csv
import json
from collections import defaultdict

# 初始化映射存储结构
value_map = defaultdict(list)

# 用with自动管理文件生命周期,无需手动关闭
with open('columnData.csv', 'r', encoding='utf-8') as f:
    csv_reader = csv.reader(f)
    # 跳过表头行
    next(csv_reader)
    for name, val in csv_reader:
        #  strip处理规避字段首尾空格/换行导致的统计误差
        value_map[val.strip()].append(name.strip())

# 筛选出Value重复的条目
result = {val: name_list for val, name_list in value_map.items() if len(name_list) >= 2}

# 按要求格式输出
print(json.dumps(result, indent=2, ensure_ascii=False))

如果不想引入collections依赖,也可以用原生字典实现存储逻辑:

value_map = {}
# 遍历部分替换为
for name, val in csv_reader:
    name = name.strip()
    val = val.strip()
    if val not in value_map:
        value_map[val] = []
    value_map[val].append(name)
优化点说明
  • 时间复杂度降到O(n):仅遍历一次数据集完成统计,无冗余遍历和高耗时计算
  • 资源操作更安全:with语句会自动处理文件关闭,异常场景也不会出现资源泄漏
  • 逻辑更简洁可靠:直接用字典做映射存储,没有多余的拼接、拆分中间步骤,也避免了字段含逗号导致的逻辑错误
  • 输出完全匹配需求:最终结果和要求的格式完全一致,json.dumps的缩进参数保证输出的排版和示例相同
  • 容错性增强:对读取的字段做了去首尾空白处理,避免原始数据里的隐形字符导致统计错误

内容的提问来源于stack exchange,提问作者liuxu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:01