import csv
from collections import defaultdict
sums = defaultdict(int)
counts = defaultdict(int)
with open("grades.csv", "r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
name = row["name"]
grade = int(row["grade"])
sums[name] += grade
counts[name] += 1
for name in sums:
avg = sums[name] / counts[name]
print(f"{name}: {avg:.2f}")
Разбор:
csv.DictReader читает CSV, возвращая каждую строку как словарь, где ключи — имена столбцов из заголовка.
defaultdict(int) — словарь с дефолтным значением 0; не нужно проверять, есть ли ключ.
f"{avg:.2f}" — форматирование с двумя знаками после запятой.
newline="" — рекомендация для модуля csv, чтобы корректно работать на разных ОС.
Пример CSV:
name,subject,grade
Иванов,Математика,5
Иванов,Физика,4
Петрова,Математика,5
Вывод:
Иванов: 4.50
Петрова: 5.00
Для сложной обработки CSV обычно используют pandas: pd.read_csv("grades.csv").groupby("name")["grade"].mean().