我有一个问题:
scores = {}
with open('score.txt', 'r') as f:
for line in f:
name, score = line.strip().rsplit(' ', 1)
score = int(score)
if name in scores:scores[name] = scores[name] + score
else:scores[name] = score
sortedScoresByMax = max(scores.items(), key = lambda t: t[1])
print (sortedScoresByMax)
score.txt包含几个带分数的名称。目前,该计划只打印出一个得分最高的人。但如果某些名称具有相同的分数,我需要该程序打印出所有这些名称。我猜我必须使用一个循环,但我无法让它工作。
答案 0 :(得分:3)
如果您知道最大值,则可以通过迭代dict
循环结束时获得的scores
对象for
来获取它。
maximum = max(scores.values())
for key in scores:
if scores[key] == maximum:
print key, scores[key]
答案 1 :(得分:1)
您可以找到最大值,然后打印所有具有该分数的玩家:
maxscore = max(scores.values())
print [(p, s) for p, s in scores.items() if s == maxscore]
答案 2 :(得分:1)
只有一次通过dict:
maxscore=0
maxscorers = []
for name, score in scores.items():
if score > maxscore:
maxscore = score
maxscorers = [name]
elif score = maxscore:
maxscorers.append(name)
我不确定这是非常pythonic,但我喜欢它,而不是先确定最大值,然后过滤列表。
答案 3 :(得分:0)
max()
只返回一个值。但是,您可以使用sorted()
和reverse=True
选项以降序获取分数和名称列表,如下所示:
sortedScoresByMax = sorted(scores.items(), reverse=True, key=lambda t: t[1])