Python打印几个(相同)值

时间:2014-03-27 19:31:55

标签: python list printing

我有一个问题:

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包含几个带分数的名称。目前,该计划只打印出一个得分最高的人。但如果某些名称具有相同的分数,我需要该程序打印出所有这些名称。我猜我必须使用一个循环,但我无法让它工作。

4 个答案:

答案 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])