我正在创建一个游戏,我想打印出从最高到最低的用户分数。
这是我目前的代码
player_scores = {}
for line in reversed(open("playerscores.txt").readlines()):
name, score = line.rstrip('\n').split(' / ')
score = int(score)
if name in player_scores and len(player_scores[name]) < 3:
player_scores[name].append(score)
if name not in user_scores:
player_scores[name] = list((score,))
playercores.txt中的名称存储如下:
Bob / 10
Jill / 10
我的代码获取用户的最后3个分数(最后3个生命),并以此为基础。我需要将用户名和最高分打印到最低。
Sort a Python dictionary by value处的解决方案不起作用。我最终得到的输出如下:
[('Alex', [1]), ('Joeseph', [32, 576]), ('Steve', [33]), ('Bob', [55, 22])]
未分类。
答案 0 :(得分:1)
从您的案例到答案的不同之处在于,您可以将其与每个键的值进行比较,因为它是一个列表。你必须比较(我想)与该列表中的最高分 - 所以关键功能必须处理:
SELECT banner_id
FROM YourTable
WHERE subject_code IN ('engl', 'math')
GROUP BY banner_id
HAVING COUNT(DISTINCT subject_code) > 1
答案 1 :(得分:0)
首先,从所有得分列表中获得每位玩家的最高分:
>>> player_scores = dict([('Alex', [1]), ('Joeseph', [32, 576]), ('Steve', [33]), ('Bob', [55, 22])])
>>> top_scores = {name: max(scores) for name, scores in player_scores.items()}
现在您可以使用operator.itemgetter
按值排序。记得扭转结果!
>>> sorted(top_scores.items(), key=operator.itemgetter(1), reverse=True)
[('Joeseph', 576), ('Bob', 55), ('Steve', 33), ('Alex', 1)]
最后,要打印它,只需执行类似
的操作for name, score in your_sorted_scores_list:
print("{:20} - {}".format(name, score))
答案 2 :(得分:0)
Python 2 这是一种方法: 的 EDITED 强>
player_scores = {
'Bob': 12,
'Pete': 3,
'Jim': 10,
'Joe': 15,
'Bill': 14,
'Sam': 2,
'Tim': 10
}
k = sorted(player_scores, key=player_scores.__getitem__, reverse=True)
v = sorted(player_scores.values(), reverse=True)
sorted_player_scores = zip(k,v)
print sorted_player_scores
输出:
[('Joe', 15), ('Bill', 14), ('Bob', 12), ('Jim', 10), ('Tim', 10), ('Pete', 3), ('Sam', 2)]