0

Python 2.3 で値によって辞書をソートするにはどうすればよいでしょうかdict.sort()sorted(dict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)新しいPythonを使用してソートを行うことができます。

必要なのはこれです: 例:

d = {'a':2,'b':1,'c':3}

並べ替え後:

[('c':3),('a':2),('b':1)]

ヒントをお願いします。ありがとう !

4

2 に答える 2

6

新しいバージョンでは当然のことと思っていることがたくさんあります...

とにかく、シュワルツ変換

>>> l = [(-x[1], x) for x in d.items()]
>>> l.sort()
>>> l2 = [x[1] for x in l]
>>> l2
[('c', 3), ('a', 2), ('b', 1)]
于 2012-06-15T02:40:47.373 に答える
3

ドキュメントから: 「sort() メソッドは、2 つの引数 (リスト項目) の比較関数を指定するオプションの引数を取り、最初の引数がより小さい、等しい、または2番目の引数よりも大きい"

だからあなたは次のようなものが欲しい

lst = d.items()
lst.sort(lambda a,b: b[1]-a[1])

返す

[('c', 3), ('a', 2), ('b', 1)]

編集:ラムダ関数はコンパレータです。通常の昇順ソートでは、a<b の場合は値 <0、a==b の場合は ==0、a>b の場合は >0 を返す必要があります。これを取得する簡単な方法は ab です。

逆の順序でソートしたいので、コンパレータの符号を逆にして、値 <0 if a>b (etc) を返します...これを取得する簡単な方法は ba です。

各項目の 2 番目のメンバーでソートしているため、比較演算子は上記のように b[1]-a[1] になります。

于 2012-06-15T02:43:28.993 に答える