I would suggest simply mapping the dictionary the other way so you can use it normally (accessing by key, not by value). After all, dicts map keys to values, not the other way around:
>>> # Open "names.dat" for reading and call it namefile
>>> with open('names.dat', 'r') as namefile:
... # read file contents to string and split on "comma space" as delimiter
... name_pairs = namefile.read().split(', ')
... # name_pairs is now a list like ['john:fred', 'fred:bill', 'sam:tony', ...]
>>> # file is automatically closed when we leave with statement
>>> fathers = {}
>>> for pair in name_pairs: # for each pair like 'john:fred'
... # split on colon, stripping any '\n' from the file from the right side
... father, son = [name.rstrip('\n') for name in pair.split(':')]
... # If pair = 'john:fred', now father is 'john' and son is 'fred'
... fathers[son] = father # which we enter into a dict named fathers
...
>>> fathers['fred'] # now fathers['father_name'] maps to value 'son_name'
'john'