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

Python字典赋值异常:CSV数据分配后多字典内容错误求助

问题排查与修复

问题根源

你的代码里这一行是核心错误:

dict_pkey = dict_url = dict_ticket = {}

在Python中,这种链式赋值会让三个变量指向同一个字典对象。也就是说,你后续对dict_url或dict_ticket的赋值操作,其实都是在修改同一个字典,最终三个变量自然会显示完全相同的内容。

修复方案

把三个字典分开初始化,每个都创建独立的空字典:

dict_pkey = {}
dict_url = {}
dict_ticket = {}

修复后的完整代码

import sys
import os
import csv

def capture_csv_data():
    try:
        input_list=[]
        with open("C:\\Personal\\Learning\\python\\request-data.csv") as csv_file:
            reader = csv.reader(csv_file)
            next(reader)
            for row_element in reader:
                input_list.append(row_element)
        # with语句会自动关闭文件,无需手动调用csv_file.close()
        process_csv_data(input_list)
    except (KeyError, ValueError) as e:
        print("\n Exception at capture_csv_data: ")
        print(e)

def process_csv_data(input_list):
    try:
        # 分开初始化三个独立字典
        dict_pkey = {}
        dict_url = {}
        dict_ticket = {}
        pkee = repo_url = ticket_number = ""
        for input_item in input_list:
            list_elements = list(input_item)
            pkee = str(list_elements[0])
            repo_url = str(list_elements[1])
            ticket_number = str(list_elements[2])
            print("Key: " + pkee + " - URL: " + repo_url + " - ticket: " + ticket_number)
            dict_pkey[pkee] = pkee
            dict_url[pkee] = repo_url
            dict_ticket[pkee] = ticket_number
        print(dict_pkey)
        print(dict_url)
        print(dict_ticket)
    except (KeyError, ValueError) as e:
        print("\n Exception at process_csv_data: ")
        print(e)

def main():
    capture_csv_data()

if __name__ == "__main__":
    main()

额外优化建议

可以使用csv.DictReader直接按列名读取数据,代码更简洁易读,避免手动索引出错:

def capture_csv_data():
    try:
        with open("C:\\Personal\\Learning\\python\\request-data.csv") as csv_file:
            reader = csv.DictReader(csv_file)
            process_csv_data(reader)
    except (KeyError, ValueError) as e:
        print("\n Exception at capture_csv_data: ")
        print(e)

def process_csv_data(reader):
    try:
        dict_pkey = {}
        dict_url = {}
        dict_ticket = {}
        for row in reader:
            pkee = row['Project_Key']
            repo_url = row['URL']
            ticket_number = row['Ticket_Number']
            print(f"Key: {pkee} - URL: {repo_url} - ticket: {ticket_number}")
            dict_pkey[pkee] = pkee
            dict_url[pkee] = repo_url
            dict_ticket[pkee] = ticket_number
        print(dict_pkey)
        print(dict_url)
        print(dict_ticket)
    except (KeyError, ValueError) as e:
        print("\n Exception at process_csv_data: ")
        print(e)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:42:04