1

私はリストのリストを持っています、

mylist = [['zzz', 100], ['sss', 100], ['555',100], ['222',100], ['333',90]]

これは、次の関数の使用に基づいてソートされた (降順) リストです。

sorted(mylist, key=ラムダ x: (x[1],x[0]), reverse=True)

これをそのように並べ替えたいので、次の順序になります

[['222',100], ['555',100], ['sss', 100], ['zzz', 100], ['333',90]]

descこれは、スコア x[1] の並べ替え順序でありasc、値 x[0]の順序として

4

3 に答える 3

6

あなたは近くて幸運です。

幸運な理由:

少なくとも 1 つの数値があり、それを否定して別の順序を作成できます

次の理由で閉じます。

それがあなたに欠けていたものです

>>> mylist = [['zzz', 100], ['sss', 100], ['555',100], ['222',100], ['333',90]]
>>> sorted(mylist, key = lambda e: (-e[1], e[0]))
[['222', 100], ['555', 100], ['sss', 100], ['zzz', 100], ['333', 90]]
>>> 
于 2013-02-27T12:15:11.577 に答える
3

数値フィールドの順序を逆にする必要がある場合は簡単です。それを否定するだけです

>>> mylist = [['zzz', 100], ['sss', 100], ['555',100], ['222',100], ['333',90]]
>>> sorted(mylist, key=lambda x:(-x[1], x[0]))
[['222', 100], ['555', 100], ['sss', 100], ['zzz', 100], ['333', 90]]

たとえば、2 つの文字列フィールドを昇順と降順で並べ替える必要がある場合は、それほど簡単ではありません。

于 2013-02-27T12:15:33.810 に答える
3

すべての要素が文字列であるなど、否定を使用できない場合は、比較関数を作成し、それを使用functools.cmp_to_keyしてキー関数に変換できます。

from functools import cmp_to_key
mylist = [['zzz', 100], ['sss', 100], ['555',100], ['222',100], ['222',90]]
def f(a, b):
    return cmp(a[0], b[0]) or -cmp(a[1], b[1])
sorted(mylist, key=cmp_to_key(f))
于 2013-02-27T12:24:13.287 に答える