How to order these lines for a highscore table in Python

python

Solution

You can use `ast.literal_eval` to parse the tuples and then pass them to `sorted`:

import ast
from operator import itemgetter

def parse_item(s):
  name, score = ast.literal_eval(s)
  return name, int(score)

with open("infile", "r") as infile:
  items = [parse_item(line.strip()) for line in infile]

for item in sorted(items, key=itemgetter(1), reverse=True):
  print item

Or the concise but confusing way:

print ''.join(sorted(open('infile'), key=lambda l: -int(ast.literal_eval(l)[1]))),

Problem

I have the following in a text file: ``` ('bob', '10') ('Ben', '10') ('Ben', '9') ('Ben', '8') ('Ben', '2') ('Ben', '6') ('Ben', '5') ('Ben', '5') ('Ben', '3') ('Ben', '2') ``` I would like to reorder it so that it is ordered by numbers going down, so that I can print them off in a high score table, however I cannot work out how to do this. Any help would be appreciated, thanks.

Original source