6

以下をソートする必要があるプログラムを作成しました。

unsorted_list=[['le', 5], ['aab', 4], ['aaa', 5]]

に:

[['aaa', 5], ['le', 5], ['aab', 4]]

番号順にソートする必要があります。数字が同じ場合は、アルファベット順に並べ替える必要があります。次のコードがあります。

def sortItem(lista):
    ''' func for sort by item'''
    return lista[1]
sorted(unsorted_list, key=sortItem, reverse=True)

残念ながら、アルファベット順の文字列は返されません。それを行う方法について何か提案はありますか?

4

3 に答える 3

10

は整数なのでx[1]、否定するだけで最大から最小に並べ替えることができます。

sorted(unsorted_list, key=lambda x: (-x[1], x[0]))

で作成されたタプルはkey、最初の要素 ( ) に従ってソートされ-x[1]、次に 2 番目の要素 ( x[0]) に従ってソートされます。これはあなたのロジックに正確に対応しています:

「つまり、数字でソートされているということですが、数字が同じ場合はアルファベット順にソートされます。」

于 2013-01-08T15:56:49.580 に答える
6
In [2]: l = [['le', 5], ['aab', 4], ['aaa', 5]]

In [3]: sorted(l, key=lambda (x,y):(-y,x))
Out[3]: [['aaa', 5], ['le', 5], ['aab', 4]]
于 2013-01-08T15:56:56.787 に答える