2014-03-27 3 views
1

У меня есть проблема здесь:Python печати несколько (же) значения

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

Вы запрашиваете только верхний игрок (и всех игроков, привязанных к 1-му), но вы называете его «отсортированными баллами»: не могли бы вы отсортировать все игроки? –

+0

Это, и вы должны использовать обычную практику отступов (разрыв строки + отступ после «:») – Jasper

ответ

3

Вы можете получить его, итерации по объекту dictscores, который вы получите в конце вашего цикла for, если вы знаете максимальное значение.

maximum = max(scores.values()) 
for key in scores: 
    if scores[key] == maximum: 
     print key, scores[key] 
+0

Это сработало отлично, спасибо. – user2333133

+0

Это в основном ответ Дэвид Робинсонс, но, безусловно, менее питонический. @OP: вы используете Python 2.x или 3.x? – Jasper

+0

@ Джаспер Похоже, Дэвид Робинсонс и я так же думали. Но, как вы можете видеть, конечно, они не дадут вам того же результата. -Благодаря –

0

max() вернет только одно значение. Вы можете, однако, использовать sorted() с опцией reverse=True, чтобы получить список счетов и имена в порядке убывания следующим образом:

sortedScoresByMax = sorted(scores.items(), reverse=True, key=lambda t: t[1]) 
1

Вы могли бы найти максимальное значение, а затем распечатать все игроки с этим счетом:

maxscore = max(scores.values()) 
print [(p, s) for p, s in scores.items() if s == maxscore] 
1

с только один проход над Dict:

maxscore=0 
maxscorers = [] 
for name, score in scores.items(): 
    if score > maxscore: 
    maxscore = score 
    maxscorers = [name] 
    elif score = maxscore: 
    maxscorers.append(name) 

я не уверен, если это очень вещий, но мне нравится больше, чем первый determini ng и затем фильтровать список.

Смежные вопросы