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

如何修复该字典相关Python代码以实现指定CSV处理功能?

代码修复方案

问题分析

你的代码存在几个关键问题,导致无法正常实现需求:

  1. 字典结构设计错误:当前字典仅统计了人名出现次数,但丢失了歌曲名、歌手等关联信息,无法满足输出要求。
  2. CSV写入字段不匹配:输出表头是["song", "artist", "year"],但写入的是{人名: 次数},字段完全不对应,会导致输出内容为空或错误。
  3. 冗余的文件关闭操作:with语句会自动管理文件资源,手动调用close()不仅多余,还会引发已关闭文件的操作错误。
  4. 未匹配需求的输出字段:需求要求输出人名数量、歌曲名和歌手,但当前表头未包含人名和计数字段。

修复后的代码

import csv
from collections import defaultdict

def findName(thresh, outputFile):
    # 构建嵌套字典,同时存储人名的出现次数和对应的歌曲、歌手信息
    # 结构: {人名: {"count": 次数, "entries": [{"song": 歌名, "artist": 歌手}, ...]}}
    name_data = defaultdict(lambda: {"count": 0, "entries": []})

    with open('allNames.csv', newline='') as csvfile:
        # 假设输入CSV包含name、song、artist字段(可根据实际文件调整)
        reader = csv.DictReader(csvfile, delimiter="\t")
        for row in reader:
            name = row["name"]
            name_data[name]["count"] += 1
            # 存储当前行的歌曲和歌手信息
            name_data[name]["entries"].append({
                "song": row["song"],
                "artist": row["artist"]
            })

    with open(outputFile, "w", newline='') as outfile:
        # 调整表头以匹配需求:人名、出现次数、歌曲名、歌手
        headers = ["name", "count", "song", "artist"]
        writer = csv.DictWriter(outfile, fieldnames=headers)
        writer.writeheader()

        # 筛选符合阈值的人名,写入对应的关联信息
        for name, data in name_data.items():
            if data["count"] >= thresh:
                # 为该人名的每一条歌曲/歌手关联记录写入一行
                for entry in data["entries"]:
                    writer.writerow({
                        "name": name,
                        "count": data["count"],
                        "song": entry["song"],
                        "artist": entry["artist"]
                    })

# 示例调用(按需取消注释)
# findName(3, "output.csv")

关键修复点说明

  • 字典结构优化:使用collections.defaultdict构建嵌套字典,同时存储人名的出现次数和对应的歌曲、歌手列表,避免丢失关联信息。
  • 输出字段匹配:调整表头为["name", "count", "song", "artist"],确保写入内容和表头一一对应。
  • 移除冗余操作:删除手动关闭文件的代码,依赖with语句自动管理文件资源。
  • 逻辑补全:遍历符合阈值的人名,将其对应的每一条歌曲/歌手关联记录写入输出文件,满足需求中同时展示人名数量、歌曲名和歌手的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:10:26