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)]
ヒントをお願いします。ありがとう !
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)]
ヒントをお願いします。ありがとう !
新しいバージョンでは当然のことと思っていることがたくさんあります...
とにかく、シュワルツ変換:
>>> 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)]
ドキュメントから: 「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] になります。