Python中词典列表的算术运算

时间:2017-11-21 17:27:11

标签: python-3.x dictionary

我目前正在使用Python 3.5.2。 我有一个数据集,包括下面的字典列表(实际数据集有超过100个这样的条目):

MyList = [{"Class":1, "ID":123, "Name":"Sam", "Marks":90},
          {"Class":1, "ID":124, "Name":"Jack", "Marks":91},
          {"Class":1, "ID":125, "Name":"Dan", "Marks":92},
          {"Class":2, "ID":234, "Name":"Sammy", "Marks":82},
          {"Class":2, "ID":235, "Name":"Jacky", "Marks":85}]

我想得到如下摘要:

ClassSummary = [{"Class":1, "TotalStudents": 3, "AvgMarks":91},
                {"Class":2, "TotalStudents": 2, "AvgMarks":83.5}]

其中TotalStudents引用每个类中“名称”的计数 和AvgMarks是指每个班级中“标记”的平均值。

我对词典列表相当新,所以任何关于如何处理这个词汇的线索都会有很大的帮助。

[编辑]这是我到目前为止所尝试的:

class_set = set()
for dict in MyList:
    class_set.add(dict["Class"])

这给了我列表中可用的不同类的列表。但我不确定如何进一步进行后续算术运算。

由于

1 个答案:

答案 0 :(得分:1)

它有点混乱,但这是我的解决方案工作正常:

ClassSummary = []
cls = 0
for d in MyList:
    if d["Class"] != cls:
        ClassSummary.append({"Class": d["Class"], "TotalStudents": 1, "AvgMarks": d["Marks"]})
        cls = d["Class"]
    else:
        ClassSummary[d["Class"]-1]["TotalStudents"] += 1
        ClassSummary[d["Class"]-1]["AvgMarks"] += d["Marks"]

for s in ClassSummary:
    s["AvgMarks"] /= s["TotalStudents"]

ClassSummary作为:

[{'TotalStudents': 3, 'AvgMarks': 91.0, 'Class': 1}, {'TotalStudents': 2, 'AvgMarks': 83.5, 'Class': 2}]

正如你所要求的那样!