繁体   English   中英

在 python(json) 中查找平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM