Il y a un problème lorsque vous utilisez ceci:
d = dict(zip(years,grades)) # dict year:grade
Prenez vos données d'entrée comme exemple, il va générer un dict comme:
{2001: 88, 2002: 99, 2003:11, 2005: 55}
Parce que lorsqu'il y a une clé en double pendant le dictionnaire de construction, la valeur est redéfinie.
Alors, pour y parvenir, je recommande d'utiliser un autre dict générer méthode, faire quelque chose comme ceci:
def construct_values(file):
"""
Construct the values needed to graph the average grade of the class over time
Parameters
----------
file_path: A string. Absolute path to file.
Returns
-------
years: array of integers
average_grades: array of floats
"""
years, average_grades = [], []
# grades = [] This variable don't need anymore
d = {}
with open(file,'r') as f:
next(f)
for line in f:
year, grade = (s.strip() for s in line.split(','))
# here is the begin line difference from your code
if year not in d:
d[year] = [int(grade), 1]
else:
d[year][0] += int(grade)
d[year][1] += 1
for year, grade_info in d.items():
years.append(year)
average_grades.append(grade_info[0]/grade_info[1])
# end difference from your code
return years, average_grades
Dans le dictionnaire milieu d, la valeur enregistrer des informations sur [sum_of_grade, times_appeared_in_the_year ], donc quand vous itérez le dictionnaire, vous pouvez facilement utiliser sum_of_grade/times_appeared_in_the_year pour calculer la moyenne.
Et donc, vous n'avez pas besoin d'utiliser la variable supplémentaires grades
Ce qui est avec i dans years.append()? Est-ce censé être l'année? En outre, je ne comprends pas comment les notes peuvent s'ajouter dans ce cas. – Mayjunejuly
Oui, je suis désolé, c'est l'année. La note est ajoutée ici: '' 'd [année] = [grade, 1]' '', quand vous rencontrez * 2001, 100 *. Le dictionnaire du milieu sera {2001: [100, 1]}, puis rencontrera * 2001, 88 *. Le dictionnaire du milieu sera {2001: [188, 2], 2002: [99, 1]}. Parce que vous voulez simplement retourner la note moyenne, je pense que nous pouvons économiser la somme des notes et le nombre de notes dans une liste. Il n'est pas nécessaire d'ajouter une valeur réelle. – Ballack
Vos codes fonctionnent, mais cela ne tient pas compte des commandes? parce qu'il est mélangé tout au long, par exemple à partir de 2001. – Mayjunejuly