如何调整嵌套的.JSON树(Python字典)的Python代码以包含多个键?
在我当前的代码中,当主题键应该有更多值时,它似乎只考虑一个值(您只能在我的JSON树中看到经济学,而不能看到数学)。我已经试了好几个小时了,但还是没法用 这是我的样本数据集-我的完整数据集中还有很多主题:如何调整嵌套的.JSON树(Python字典)的Python代码以包含多个键?,python,json,dictionary,Python,Json,Dictionary,在我当前的代码中,当主题键应该有更多值时,它似乎只考虑一个值(您只能在我的JSON树中看到经济学,而不能看到数学)。我已经试了好几个小时了,但还是没法用 这是我的样本数据集-我的完整数据集中还有很多主题: ID,Name,Date,Subject,Start,Finish 0,Ladybridge High School,01/11/2019,Maths,05:28,06:45 0,Ladybridge High School,02/11/2019,Maths,05:30,06:45 0,Lad
ID,Name,Date,Subject,Start,Finish
0,Ladybridge High School,01/11/2019,Maths,05:28,06:45
0,Ladybridge High School,02/11/2019,Maths,05:30,06:45
0,Ladybridge High School,01/11/2019,Economics,11:58,12:40
0,Ladybridge High School,02/11/2019,Economics,11:58,12:40
1,Loreto Sixth Form,01/11/2019,Maths,05:28,06:45
1,Loreto Sixth Form,02/11/2019,Maths,05:30,06:45
1,Loreto Sixth Form,01/11/2019,Economics,11:58,12:40
1,Loreto Sixth Form,02/11/2019,Economics,11:58,12:40
以下是我的Python代码:
timetable = {"Timetable": []}
with open("C:/Users/kspv914/Downloads/Personal/Project Dawn/Timetable Sample.csv") as f:
csv_data = [{k: v for k, v in row.items()} for row in csv.DictReader(f, skipinitialspace=True)]
name_array = []
for name in [row["Name"] for row in csv_data]:
name_array.append(name)
name_set = set(name_array)
for name in name_set:
timetable["Timetable"].append({"Name": name, "Date": {}})
for row in csv_data:
for entry in timetable["Timetable"]:
if entry["Name"] == row["Name"]:
entry["Date"][row["Date"]] = {}
entry["Date"][row["Date"]][row["Subject"]] = {
"Start": row["Start"],
"Finish": row["Finish"]
}
这是我的JSON树:
您正在将date dict设置为空,然后添加一个主题 这样做:
timetable = {"Timetable": []}
with open("a.csv") as f:
csv_data = [{k: v for k, v in row.items()} for row in csv.DictReader(f, skipinitialspace=True)]
name_array = []
for name in [row["Name"] for row in csv_data]:
name_array.append(name)
name_set = set(name_array)
for name in name_set:
timetable["Timetable"].append({"Name": name, "Date": {}})
for row in csv_data:
for entry in timetable["Timetable"]:
if entry["Name"] == row["Name"]:
if row["Date"] not in entry["Date"]:
entry["Date"][row["Date"]] = {}
entry["Date"][row["Date"]][row["Subject"]] = {
"Start": row["Start"],
"Finish": row["Finish"]
}
在将{}
赋值给条目[“日期”][行[“日期”]]之前,我刚刚添加了if条件
它将给出如下图所示的输出:
您正在将date dict设置为空,然后添加一个主题
这样做:
timetable = {"Timetable": []}
with open("a.csv") as f:
csv_data = [{k: v for k, v in row.items()} for row in csv.DictReader(f, skipinitialspace=True)]
name_array = []
for name in [row["Name"] for row in csv_data]:
name_array.append(name)
name_set = set(name_array)
for name in name_set:
timetable["Timetable"].append({"Name": name, "Date": {}})
for row in csv_data:
for entry in timetable["Timetable"]:
if entry["Name"] == row["Name"]:
if row["Date"] not in entry["Date"]:
entry["Date"][row["Date"]] = {}
entry["Date"][row["Date"]][row["Subject"]] = {
"Start": row["Start"],
"Finish": row["Finish"]
}
在将{}
赋值给条目[“日期”][行[“日期”]]之前,我刚刚添加了if条件
它将给出如下图所示的输出:
您正在使用条目[“日期”][行[“日期”]][行[“主题”]]=
覆盖您的dict条目。第一次满足“数学”时,将创建条目。第二次它被覆盖
您的预期结果应该是列表
,而不是目录
。每个条目都应该用时间表\u list.append()
附加到列表中
下面是一段简单的代码,它可以在不丢失数据的情况下将整个csv文件转换为Json:
import csv
import json
data = []
with open("ex1.csv") as f:
reader = csv.DictReader(f)
for row in reader:
data.append(row)
print(json.dumps({"Timetable": data}, indent=4))
您正在使用条目[“日期”][行[“日期”]][行[“主题”]]=
覆盖dict条目。第一次满足“数学”时,将创建条目。第二次它被覆盖
您的预期结果应该是列表
,而不是目录
。每个条目都应该用时间表\u list.append()
附加到列表中
下面是一段简单的代码,它可以在不丢失数据的情况下将整个csv文件转换为Json:
import csv
import json
data = []
with open("ex1.csv") as f:
reader = csv.DictReader(f)
for row in reader:
data.append(row)
print(json.dumps({"Timetable": data}, indent=4))
你能详细说明你的具体问题吗?在我的JSON树中,你只能看到经济学主题…数学到哪里去了?你能详细说明你的具体问题吗?在我的JSON树中,你只能看到经济学主题…数学到哪里去了?非常感谢。知道我将如何添加与“名称”(无嵌套数据)和“日期”(包含嵌套数据)处于同一级别的其他数据(无嵌套数据)吗?非常感谢。知道如何添加与“名称”(无嵌套数据)和“日期”(包含嵌套数据)处于同一级别的其他数据(无嵌套数据)吗?