How To Get An Average From A Row Then Make A List Out Of It
If I have a csv data that gives two row values of: years grades 2001 98 2001 75 2008 100 2003 57 2008 50 I have more values but I will try to explain what I am trying to get
Solution 1:
Why not build a dictionary of grades with the key being each year:
from collections import defaultdict
grades = defaultdict(lambda: [])
withopen('grades.csv', 'r') as f:
year, grade = (s.strip() for s in row.split(','))
grades[year].append(grade)
Then print the averages:
for y, g in grades:
print('{}: {}', y, sum(g) / float(len(g)))
Solution 2:
you can use defaultdict
to form a dictionary whose value (grade
) is a list , key is year
, then append grade to same year in the dictionary, after that data
will be a defaultdict(list)
:
defaultdict(<type'list'>, {'2003': ['57'], '2008': ['100', '50'], '2001': ['98', '75']})
Then, you can for loop the key and value to calculate the average:
from collections import defaultdict
data = defaultdict(list)
average_grade_by_year = dict()
withopen('grades.csv', 'r') as filing:
next(filing)
for row in filing:
year, grade = (s.strip() for s in row.split(','))
data[year].append(grade)
for k, v in data.items():
average_grade_by_year[k] = float(sum(int(x) for x in v))/len(v)
print(average_grade_by_year)
average_grade_by_year
will be: {'2001': 86.5, '2003': 57.0, '2008': 75.0}
Post a Comment for "How To Get An Average From A Row Then Make A List Out Of It"