Очень нетривиально Вы задумали с сортировкой. К слову словарь сортировку не поддерживает, поэтому я бы от него отказался (особенно с учетом того, что у Вас не пара переменных, а три).
Для организации доступа к Вашим трем переменным никаких классов писать не надо, достаточно использовать namedtuple:
>>> import collections
>>> pair = collections.namedtuple('pair',['cat','dog','text'])
Хранить "пары" лучше в списке:
>>> vlist=[]
>>> vlist.append(pair(900,2,'foo'))
>>> vlist.append(pair(500,4,'bar'))
>>> vlist.append(pair(300, 10, 'foobar'))
>>> vlist
[pair(cat=900, dog=2, text='foo'), pair(cat=500, dog=4, text='bar'), pair(cat=300, dog=10, text='foobar')]
При этом будет поддерживаться сортировка по первому параметру (cat):
>>> vlist.sort()
>>> vlist
[pair(cat=300, dog=10, text='foobar'), pair(cat=500, dog=4, text='bar'), pair(cat=900, dog=2, text='foo')]
Заметьте, что на выходе мы будем иметь изменяемый список, что позволит Вам пересортировать его циклом так, как Вам заблагорассудится (скажем, если значения
cat у соседних элементов равны, отсортировать их в обратном порядке по значению
dog (я правильно понял, что Вы хотели именно это?)).