【发布时间】:2020-04-08 09:02:10
【问题描述】:
我得到以下列表,其中包含 4 个元组,每个玩家在 7 场比赛中的得分:
players_score = [ ('Joe', 100, 34, 38, 90, 67, 3, 10),
('Bob', 90, 38, 4, 100, 60, 4, 11),
('May', 80, 36, 40, 91, 70, 2, 12),
('Anna', 95, 32, 36, 92, 68, 8, 13) ]
由于我想了解更多有关字典的信息,我询问如何将上述内容转换为字典。我得到了以下信息:
# convert player's scores to dictionary
games = {}
for (player_name, *scores) in players_score:
for game_no, score in enumerate(scores, 1):
games.setdefault(game_no, {}).setdefault(player_name, {})
games[game_no][player_name] = score
# the dictionary "games" will look like:
# {1: {'Anna': 95, 'Bob': 90, 'Joe': 100, 'May': 80},
# 2: {'Anna': 32, 'Bob': 38, 'Joe': 34, 'May': 36},
# 3: {'Anna': 36, 'Bob': 4, 'Joe': 38, 'May': 40},
# 4: {'Anna': 92, 'Bob': 100, 'Joe': 90, 'May': 91},
# 5: {'Anna': 68, 'Bob': 60, 'Joe': 67, 'May': 70},
# 6: {'Anna': 8, 'Bob': 4, 'Joe': 3, 'May': 2},
# 7: {'Anna': 13, 'Bob': 11, 'Joe': 10, 'May': 12}}
现在我正在尝试不同的方法来对每个玩家在每场比赛中的得分进行排名,然后将这些得分相加以返回如下内容:
{'Anna': 23, 'May': 18, 'Bob': 16, 'Joe': 15}
上面的分数是在返回每场比赛的排名总和时产生的。我让最好的玩家,每场比赛得分最高的获得4分,第二名获得3分,以此类推。
当然,像这样对第 1 场比赛的结果进行排序并不难:
score_list = []
for p in players_score:
score_list.append(p[1])
score_list.sort(reverse=True)
print(score_list)
返回:[100, 95, 90, 80]
在列表/字典中搜索这些值,然后将点 (4/3/2/1) 添加到名称并最后总结它们会有什么好处吗?
【问题讨论】:
-
当两个或更多玩家在某个回合中打成平手时,积分应该是多少?
-
想用字典很好,但我的第一个想法是使用表格,可能是 Pandas。我也不完全确定我理解你的问题。
-
安娜的分数不应该是20,鲍勃的分数是17
标签: python list dictionary enumerate