首页 > 解决方案 > 在字典中按升序保存每个人名字的平均值

问题描述

如何按照字典中人名的平均分数向上的顺序保存每个人的平均值?

最后,将前 3 个高点保存在名为 top 的列表中?

import csv
from statistics import mean

with open('grades.csv') as f:
      reader = csv.reader(f)
      for row in reader:
            #print(row)
            name = row[0]
            grades = []
            for grade in row[1:]:
                  grades.append(int(grade))


            print('Average of %s --> %f' % (name, mean(grades)))

标签: pythonpython-3.xcsvdictionary

解决方案


这是我的例子,这是你想要的吗?

from statistics import mean

items = [
    ['John', 1,2,3,5,21,2,3,2,1,2,5],
    ['Alice', 5,31,6,73,4,2,1],
    ['Bill', 7,4,6,78,3,1,2,21],
    ['Sarah', 2,3,5,6,4,7,7],
    ['Martin', 2,4,6,3,8,2,3,3],
]

some_dict = {}
for row in items:
    name = row[0]
    grades = list(map(int, row[1:]))

    print('Average of %s --> %f' % (name, mean(grades)))
    some_dict.update({name: {'grades': grades, 'mean': mean(grades)}})

print(some_dict)
print(sorted(some_dict.items()))

输出:

Average of John --> 4.272727
Average of Alice --> 17.428571
Average of Bill --> 15.250000
Average of Sarah --> 4.857143
Average of Martin --> 3.875000
{'John': {'grades': [1, 2, 3, 5, 21, 2, 3, 2, 1, 2, 5], 'mean': 4.2727272727272725}, 'Alice': {'grades': [5, 31, 6, 73, 4, 2, 1], 'mean': 17.428571428571427}, 'Bill': {'grades': [7, 4, 6, 78, 3, 1, 2, 21], 'mean': 15.25}, 'Sarah': {'grades': [2, 3, 5, 6, 4, 7, 7], 'mean': 4.857142857142857}, 'Martin': {'grades': [2, 4, 6, 3, 8, 2, 3, 3], 'mean': 3.875}}
[('Alice', {'grades': [5, 31, 6, 73, 4, 2, 1], 'mean': 17.428571428571427}), ('Bill', {'grades': [7, 4, 6, 78, 3, 1, 2, 21], 'mean': 15.25}), ('John', {'grades': [1, 2, 3, 5, 21, 2, 3, 2, 1, 2, 5], 'mean': 4.2727272727272725}), ('Martin', {'grades': [2, 4, 6, 3, 8, 2, 3, 3], 'mean': 3.875}), ('Sarah', {'grades': [2, 3, 5, 6, 4, 7, 7], 'mean': 4.857142857142857})]

推荐阅读