Ranking players in a league by sorting the contents of an OrderedDict
First of all, your entire def player_rank: is way over-engineered.. and with the correct standard modules this practically becomes a one-liner

Review


Use better variable names (naming is hard), but to me names like c, x makes no sense. I don't know what they do at all.
Use built in methods, like sort() this greatly reduces complexity.
With the full powers of sorted() you can sort multiple items at once.
With a - before the item we are sorting you can reverse the order, that makes it easier to sort multiple items on different orders. 


With my changes I get the following code.

from collections import OrderedDict, Counter

class LeagueTable:
    def __init__(self, players):
        self.standings = OrderedDict([(player, Counter()) for player in players])

    def record_result(self, player, score):
        self.standings[player]['games_played'] += 1
        self.standings[player]['score'] += score

    def player_rank(self, rank):
        return sorted(self.standings, key=lambda p: (-self.standings[p]['score'], 
                                                     self.standings[p]['games_played']))[rank-1]