循环的替代方案(优化)



我有一个样本Json,如下所述

[{
"Name": "Kim",
"Details": {
"Age": 43,
"Gender": "Male",
"Education": [{
"Primary": "Xavier",
"Percentage": 90,
"subject": [{
"sub": "Math",
"Perf": "Good"
}],
"Marks": [{
"Mark": 90,
"Grade": "A"
}]
},
{
"Secondary": "Anthony",
"Percentage": 98,
"subject": [{
"sub": "Math",
"Perf": "Good"
}],
"Marks": [{
"Mark": 100,
"Grade": "S"
}]
},
{
"Bachelor": "Boston",
"Percentage": 90,
"subject": [{
"sub": "Computers",
"Perf": "Good"
}],
"Marks": [{
"Mark": 90,
"Grade": "A"
}]
},
{
"PostGrad": "Boston",
"Percentage": 90,
"subject": [{
"sub": "CNN",
"Perf": "Good"
}],
"Marks": [{
"Mark": 90,
"Grade": "A"
}]   
}]
}
}]

我只需要从整个Json中提取sub和Mark。

我得到了必要的输出,但问题是我使用了多个for循环,下面提到的是我获取子和标记的方法,

import json
sampleJson = open('C:\Users\SampleJson.json')
sampleJsonData = json.loads(sampleJson.read())
resArray=[]
for i in range(len(sampleJsonData)):
for j in range(len(sampleJsonData[i]["Details"])):
for k in range(len(sampleJsonData[i]["Details"]["Education"])):
for l in range(len(sampleJsonData[i]["Details"]["Education"])):
for y in range(len(sampleJsonData[i]["Details"]["Education"][l]["subject"])):
sub = (sampleJsonData[i]["Details"]["Education"][l]["subject"][y]["sub"])
for z in range(len(sampleJsonData[i]["Details"]["Education"][l]["Marks"])):
marks = sampleJsonData[i]["Details"]["Education"][l]["Marks"][z]["Mark"]

无论如何,我是否有可能将for循环的使用减少到零。

我需要进一步使用sub和Mark值,因为临时度量将这些值存储在不同的变量中。

我对python还比较陌生,请帮我一下。感谢

您可以使用列表理解。根据您的示例,假设数据由一个包含一个字典的列表组成,它可能看起来像这样:

[(i['subject'][0]['sub'], i['Marks'][0]['Mark']) for i in sampleJsonData[0]['Details']['Education']]

输出:

[('Math', 90), ('Math', 100), ('Computers', 90), ('CNN', 90)]

最新更新