排序OrderedDi内容的更好方法

2024-04-25 11:33:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在重新考虑处理这个问题的方法。我对Python还不熟悉。所以还有很多事要做。 https://www.testdome.com/for-developers/solve-question/11195 我现在被这个问题困住了。我有一个暂时的解决办法。我想知道是否有一个更优化的方法。你知道吗

    from collections import Counter
    from collections import OrderedDict
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'] += int(score)# print(self.standings)# print("")
def player_rank(self, rank): #res = OrderedDict()
    x=self.standings
    d=self.standings
    def swap_list(xl,co):
        xl[co],xl[co+3]=xl[co+3],xl[co]
        xl[co+1],xl[co+4]=xl[co+4],xl[co+1]
        xl[co+2],xl[co+5]=xl[co+5],xl[co+2]
        return(xl,co)

    player_list=[]
    lc=len(x)
    lc1=lc
    lc=lc*3
    for p,c in x.items():
        player_list.append(p)
        player_list.append(c["score"])
        player_list.append(c["games_played"])
    for j in range(lc1):
        for i in range(0,lc-3,3):
            # print(i+4)
            if (player_list[i+1] < player_list[i+4]):
                swap_list(player_list,i)
            elif (player_list[i+1]==player_list[i+4]):
                if(player_list[i+2]>player_list[i+5]):
                    swap_list(player_list,i)
                elif(player_list[i+2]==player_list[i+5]):
                    pass

    return(player_list[(rank-1)*3])

table = LeagueTable(['Mike', 'Chris', 'Arnold'])
table.record_result('Mike', 2)
table.record_result('Mike', 3)
table.record_result('Arnold', 5)
table.record_result('Chris', 5)
rk=int(input("enter rank \n"))
print(table.player_rank(rk))

任何帮助都将不胜感激


Tags: inselffordeftableresultrecordlist