The following solution makes a few assumptions. The first is that the number of lines in your file is even because there is always a line with the score followed by a line with the name. It also assumes that there are no duplicate names and the format you are showing is honored.
With that said, this solution shows you how to build a dictionary mapping names to scores and should point you in the right direction.
>>> with open('ClassA.txt') as f:
... scores = {name.strip():int(score) for score, name in zip(f, f)}
...
>>> scores
{'Callum': 6, 'Sasha': 4, 'Olivia': 8, 'Joe': 7, 'Dominic': 3, 'Eric': 1}
Further reading: How do I read two lines from a file at a time using python
For people stumbling across this question using Python 2: consider using itertools.izip
for memory efficiency, especially if the file is large.
edit:
Most of your assumptions are correct however names are used again three times each, the code which you have given would work if the name was not repeated.
You should have mentioned that. In that case, I suggest that you append the scores to a list. You can't have the same key twice in a dictionary.
>>> from collections import defaultdict
>>> scores = defaultdict(list)
>>>
>>> with open('ClassA.txt') as f:
... for score, name in zip(f, f):
... scores[name.strip()].append(int(score))
...
>>> scores
defaultdict(<type 'list'>, {'Callum': [6, 12, 18], 'Sasha': [4, 10, 16], 'Olivia': [5, 11, 17], 'Joe': [3, 9, 15], 'Dominic': [1, 7, 13], 'Eric': [2, 8, 14]})
The inputfile I used for the demo looks like this:
1
Dominic
2
Eric
3
Joe
4
Sasha
5
Olivia
6
Callum
7
Dominic
8
Eric
9
Joe
10
Sasha
11
Olivia
12
Callum
13
Dominic
14
Eric
15
Joe
16
Sasha
17
Olivia
18
Callum