import collections
Player = collections.namedtuple('Player', 'score name')
d = {'John': 5, 'Alex' : 10, 'Richard': 7}
Сортировка с наименьшей оценкой сначала:
worst = sorted(Player(v ,k) for (k, v) in d.items())
Сортировка по наивысшему рангу:
best = sorted([Player(v, k) for (k, v) in d.items()], reverse=True)
Теперь вы можете получить имя и оценку следующим образом:
player = best[1]
player.name
# Out: 'Richard'
player.score
# Out: 7