提问人:Aum_Khorava 提问时间:7/27/2023 更新时间:7/27/2023 访问量:45
字典中的键错误,即使该键存在
key error in dictionary even though that key is present
问:
我正在做的是链接字典。所以我已经链接了两个,但是当我尝试链接它时,代码抛出一个密钥错误。这是我构建的将csv文件转换为字典的功能。
def csv_read_to_dict(fl_name):
file = open(fl_name,"r")
data = csv.reader(file)
data_list = list(data)
final_list = []
for value in range(1,len(data_list)):
final_list.append(data_list[value])
final_dict = {}
for data in final_list:
final_dict[data[0]] = {"SEM_4":{"Subject":{"OS":data[2],"OOP":data[3],"COA":data[4],"DM":data[5],"Management":data[6]}}}
return final_dict
我所期望的是将 sem 3 和 4 结果添加到现有字典中。此图显示了 SEM 1 和 2
答:
0赞
Roronoa Zoro
7/27/2023
#1
Python 中的 update() 函数可用于链接字典。但是,根据您提供的函数,您似乎正在为 CSV 文件中的每一行创建一个新词典,而不是立即更新现有词典。若要解决此问题,必须首先确定现有字典中是否已存在键(例如,“SEM_4”)。如果是这样,您可以更改该值;否则,您可以创建新的键值对。
以下是函数的修订版本,包括第 3 学期和第 4 学期,结果链接在一起:
def csv_read_to_dict(fl_name, existing_dict=None):
file = open(fl_name, "r")
data = csv.reader(file)
data_list = list(data)
final_list = []
for value in range(1, len(data_list)):
final_list.append(data_list[value])
if existing_dict is None:
final_dict = {}
else:
final_dict = existing_dict
for data in final_list:
student_id = data[0]
sem_4_data = {
"SEM_4": {
"Subject": {
"OS": data[2],
"OOP": data[3],
"COA": data[4],
"DM": data[5],
"Management": data[6]
}
}
}
if student_id in final_dict:
if "SEM_4" in final_dict[student_id]:
final_dict[student_id]["SEM_4"]["Subject"].update(sem_4_data["SEM_4"]["Subject"])
else:
final_dict[student_id].update(sem_4_data)
else:
final_dict[student_id] = sem_4_data
return final_dict
您现在可以将现有词典(包括第 1 学期和第 2 学期的数据)作为“existing_dict”参数发送到此更新的函数,它会将第 3 学期和第 4 学期的数据集成到现有词典中。如果您没有现有的词典,请在不使用“existing_dict”选项的情况下运行该函数,它将生成一个新词典,其中包含第 3 学期和第 4 学期的数据。
谢谢。
评论
with open(fl_name) as ... :