テキストファイルに次のものがあります。
('bob', '10')
('Ben', '10')
('Ben', '9')
('Ben', '8')
('Ben', '2')
('Ben', '6')
('Ben', '5')
('Ben', '5')
('Ben', '3')
('Ben', '2')
ハイスコア表に印刷できるように、数字が下がる順に並べ替えたいのですが、これを行う方法がわかりません。どんな助けでも感謝します、ありがとう。
テキストファイルに次のものがあります。
('bob', '10')
('Ben', '10')
('Ben', '9')
('Ben', '8')
('Ben', '2')
('Ben', '6')
('Ben', '5')
('Ben', '5')
('Ben', '3')
('Ben', '2')
ハイスコア表に印刷できるように、数字が下がる順に並べ替えたいのですが、これを行う方法がわかりません。どんな助けでも感謝します、ありがとう。
を使用ast.literal_eval
してタプルを解析し、それらをに渡すことができます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
または簡潔だが紛らわしい方法:
print ''.join(sorted(open('infile'), key=lambda l: -int(ast.literal_eval(l)[1]))),
l
がタプルのリストの場合、次のように並べ替えが行われます。
sorted(l, key=lambda(name,score):int(score), reverse=True)
ファイルの読み取りは、読者の演習として残されています:)
ハイスコアリストが将来さらに複雑になると思われる場合でも、タプルのリストの使用をやめ、代わりに専用のクラスインスタンスのリストを使用する必要があります。
とにかく、タプルを使用する場合は、str番号をintに変換し、タプルの2つのフィールドの順序を逆にして、ソートされるものを取得します。
クラスは次のようになります。
class Highscore:
def __init__(self, name, score):
self.name = name
self.score = score
def __cmp__(self, other):
return -cmp(self.score, other.score)