[英]Find Average in python(json)
我有一个 JSON,如下所示:
[
[
{
"subject": "Subject_1",
"qapali_correct_count": "12"
},
{
"subject": "Subject_2",
"qapali_correct_count": "9"
}
],
[
{
"subject": "Subject_1",
"qapali_correct_count": "14"
},
{
"subject": "Subject_2",
"qapali_correct_count": "15"
}
],
[
{
"subject": "Subject_1",
"qapali_correct_count": "11"
},
{
"subject": "Subject_2",
"qapali_correct_count": "12"
}
]
]
我必须 output 每个主题的平均值:例如: subject_1 = 12.33, subject_2=12我尝试了这段代码它有效,但我只是想知道是否有任何选项可以加速这段代码,是否有任何其他有效的方法来实现它。
results = Result.objects.filter(exam=obj_exam, grade=obj_grade)
student_count = results.count()
final_data = {}
for result in results:
st_naswer_js = json.loads(result.student_answer_data_finish)
for rslt in st_naswer_js:
previus_data = final_data.get(rslt['subject'],0)
previus_data = previus_data+int(rslt['qapali_correct_count'])
final_data.update({rslt['subject']:previus_data})
for dudu, data in final_data.items():
tmp_data = data/student_count
final_data[dudu]=tmp_data
print(final_data)
请注意,它是一个 Django 项目。
您问题中的代码有几个不相关的位。 我会坚持这部分:
我必须 output 每个科目的平均值:例如: subject_1 = 12.33, subject_2=12
我假设上面的结果列表在一个名为results
的列表中。 如果它是每个学生加载的 json,则处理可能已经在您现有的代码中。 下面的主要焦点是subject_score
。
将每个主题的分数存储在字典中,其值是分数列表。 我在这里使用了一个defaultdict
,其中list
作为默认工厂,因此当访问一个不存在的字典值时,它会被初始化为一个空列表(而不是抛出一个标准字典会发生的 KeyError。
import collections
subject_score = collections.defaultdict(list)
for result in results:
for stud_score in result:
# add each score to the list of scores for that subject
# use int or float above as needed
subject_score[stud_score['subject']].append(int(stud_score['qapali_correct_count']))
# `subject_score` is now:
# defaultdict(list, {'Subject_1': [12, 14, 11], 'Subject_2': [9, 15, 12]})
averages = {sub: sum(scores)/len(scores) for sub, scores in subject_score.items()}
averages
是:
{'Subject_1': 12.333333333333334, 'Subject_2': 12.0}
或者您可以根据需要打印或保存到文件、数据库等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.