from operator import itemgetter # All HWs out of 10 pts grades = { "Cynthia": {"HW1":7, "HW2":6, "HW3":8}, "Ruth": {"HW1":8, "HW2":9, "HW3":0, "HW4":7}, "Eric": {"HW1":10, "HW2":8, "HW3":5}, "Emilia": {"HW1":9, "HW2":8, "HW3":9}, "Emily": {"HW1":10, "HW2":8, "HW3":8}, "Lauren": {"HW1":9, "HW2":9, "HW3":9}} # Create a list of (Name, Avg) tuples where Avg is HW Average name_avg_list = [] for name in grades.keys(): score_dict = grades[name] sum_of_scores = 0 count_of_scores = 0 for hw in score_dict: score = score_dict[hw] sum_of_scores += score count_of_scores += 1 average_score = float(sum_of_scores)/count_of_scores name_avg_list.append((name, average_score)) print name_avg_list print sorted(name_avg_list, key=itemgetter(1), reverse=True) # Planning the code: # # for each name, get score_dict # process each score_dict by: # sum up all hw scores # count how many hw scores # calc avg as sum/count # create a tuple: (name, avg) # append tuple to list of tuples