メソッドを使用し.split(',')
て行を個別の部分に分割し、 を使用int()
してスコアを数値に変換できます。.sort()
メソッドはリストをその場でソートkey
し、何をソートするかを伝えます。
scores = []
with open("scores.txt") as f:
for line in f:
name, score = line.split(',')
score = int(score)
scores.append((name, score))
scores.sort(key=lambda s: s[1])
for name, score in scores:
print(name, score)
これにより、(名前、スコア)ペアを含むタプルのリストがソートされた順序で表示されます。それらの間にカンマを入れて印刷したい場合(一貫性を保つために)、印刷を次のように変更しますprint(name, score, sep=', ')
入力ファイルの読み取りは、1 行 (大きな) として表現することもできます。
with open("scores.txt") as f:
scores = [(name, int(score)) for name, score in (line.split(',') for line in f)]
の簡単な説明key=
:
ラムダ関数は無名関数、つまり名前のない関数です。通常、これらは、小さな操作のためだけの関数が必要な場合に使用します。 関数を取り、その関数の戻り値をオブジェクトのソートに使用する.sort
オプションのキーワード引数があります。key
したがって、これは次lambda
のようにも記述できます。
def ret_score(pair):
return pair[1]
そして、あなたはそれを書くことができます .sort(key=ret_score)
が、私たちは本当にその関数を他に必要としないので、それを宣言する必要はありません. ラムダ構文は
lambda <arguments> : <return value>
したがって、このラムダはペアを取り、その中の 2 番目の要素を返します。必要に応じて、保存しlambda
て通常の関数のように使用できます。
>>> square = lambda x: x**2 # takes x, returns x squared
>>> square(3)
9
>>> square(6)
36