2017-05-16 18 views
0

students_gradeは、それぞれが学生名とグレードを持つタプルを含むリストです。たとえば :辞書をint(値)でソートする

students_grade = [('jon','88'), ('bran', '100'), ('arya','93'), ('dan', '88')] 

目標は成績順と同じタプルで新しいリストを作成することです:

辞書を使用して、それを解決しようとしました
[('jon','88'), ('dan', '88',' ('arya','93'),('bran','100')] 

は、しかし私は、'100' < '93'Trueを返すことに気づきましただから、int(values)で辞書をソートしようとしましたが、TypeErrorがあります。

dic = {} 
for i in students_grades: 
    dic[i[0]] = i[1] 
sorted_keys = sorted(dic.keys(), key = int(dic.get), reverse=True) 

int(dic.get)せずにそれが正常に動作します。なぜそれは失敗するのですか?

+0

ディクショナリインスタンスメソッドを整数に変換しようとしているためです。おそらくあなたは 'key = lambda k:int(dic.get(k))'のようなものを意味していました。 'key'引数は、単一の引数を受け入れる呼び出し可能でなければなりません。 – jonrsharpe

答えて

1

通常の辞書のための注文という概念はなく、とにかくそれをリストのソートに使う必要はありません。これを試してください:

x = [('jon', '88'), ('bran', '100'), ('arya', '93'), ('dan', '88')] 
sorted(x, key=lambda pair: int(pair[1])) 
=> [('jon', '88'), ('dan', '88'), ('arya', '93'), ('bran', '100')] 
関連する問題