我目前正在使用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"])
这给了我列表中可用的不同类的列表。但我不确定如何进一步进行后续算术运算。
由于
答案 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}]
正如你所要求的那样!