Connor Thompson
Connor Thompson

Reputation: 21

Issues with KeyError: 0

Im having issued where my code keeps saying KeyError: 0, I have searched all over and couldn't find a way to fix this

    student_scores = {'0':65.0, '1':54.7}
    average_score = 66.0
    i = 0
    for v in student_scores:
      if student_scores[i] >= average_score:
        above_avg_check = "{} {}".format(student_names[i], student_scores[i])
        above_avg.append(above_avg_check)
        print(above_avg_check)
      i += 1 

I am not sure on what to do, i is both a counter and the key of student_scores, so I can use it in a while loop.

Upvotes: 1

Views: 955

Answers (2)

Simeon Ikudabo
Simeon Ikudabo

Reputation: 2190

You can use the .items() method and get the scores in a much more simple way. The you can format your string based on the student and their score within your for loop.

student_scores = {'0': 65.0, '1': 54.7}
average_score = 65.0
i = 0
above_avg = []

for student, score in student_scores.items():
    if score >= average_score:
       above_average_check = '{}:  {}'.format(student, score)
       above_avg.append(above_average_check)
       print(above_average_check)
    i += 1

And here is your output:

0: 65.0

This will get you the output that you are looking for as you iterate through each key and its corresponding value.

Upvotes: 0

chevybow
chevybow

Reputation: 11908

You're checking an integer index while your 0 index is actually a string.

This code compiles for me on repl, just convert your index values to strings before trying to find them

student_scores = {'0':65.0, '1':54.7}
average_score = 66.0
i = 0
for v in student_scores:
  if student_scores[str(i)] >= average_score:
    above_avg_check = "{} {}".format(student_names[str(i)], student_scores[str(i)])
    above_avg.append(above_avg_check)
    print(above_avg_check)
  i += 1 

Upvotes: 2

Related Questions