Предположим, что «отчеты игроков» находятся в списке:
values = ['Player 1: 3','Player 2: 4','Player 3: 3','Player 4: 5']
values.sort(key=lambda s: [(-int(b),a) for a,b in (s.split(':'),)])
print values
результаты в
['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3']
=============
Боб Лоин сказал, что хочет получить
Игрок 4 : 5, Игрок 2 : 4, Игрок 1 : 3, Игрок 3 : 3
Даниэль Роузман работает хорошо или нет, в зависимости от списка обработанных.
Мое решение дает правильный результат. Смотрите разницу во втором списке
values = ['Player 1: 3','Player 2: 4','Player 3: 3','Player 4: 5']
print ' ',values
print
print 'Dan',sorted(values, key=lambda s: s.split(': ')[1], reverse=True)
print 'eyq',sorted(values, key=lambda s: [(-int(b),a)
for a,b in (s.split(':'),)])
print '\n===================================\n'
values = ['Player 3: 3','Player 2: 4','Player 1: 3','Player 4: 5']
print ' ',values
print
print 'Dan',sorted(values, key=lambda s: s.split(':')[1], reverse=True)
print 'eyq',sorted(values, key=lambda s: [(-int(b),a)
for a,b in (s.split(': '),)])
результат
['Player 1: 3', 'Player 2: 4', 'Player 3: 3', 'Player 4: 5']
Dan ['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3']
eyq ['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3']
===================================
['Player 3: 3', 'Player 2: 4', 'Player 1: 3', 'Player 4: 5']
Dan ['Player 4: 5', 'Player 2: 4', 'Player 3: 3', 'Player 1: 3']
eyq ['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3']