26

素晴らしい を発見した直後sorted()、私は再び立ち往生しました。

問題は、フォームの辞書がありstring(key) : integer(value)、整数値の降順で並べ替える必要があることです、2 つの要素が同じ値を持つ場合は、キーの昇順です。

より明確にするための例:

d = {'banana':3, 'orange':5, 'apple':5}
out: [('apple', 5), ('orange', 5), ('banana', 3)]

いくつかの調査を行った後、次のようなものにたどり着きました:

sorted(d.items(), key=operator.itemgetter(1,0), reverse=True)
out: [('orange', 5), ('apple', 5), ('banana', 3)]

これは、値とキーの両方を逆ソートしているためです。鍵を元に戻す必要があります。

4

2 に答える 2

67

何かのようなもの

In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}

In [2]: sorted(d.items(), key=lambda x: (-x[1], x[0]))
Out[2]: [('apple', 5), ('orange', 5), ('banana', 3)]
于 2013-03-12T20:44:00.057 に答える
-1
  • 辞書は直接ソートできないため、キーと値のペアを含むタプルのリストであるitems()をソートする必要があります。

  • 値フィールド、次にキー フィールドで並べ替えたいのでoperator.itemgetter、指定されたフィールドを取得する並べ替えキーとして使用するために、タプルからそれらのフィールドを抽出する必要があります。

  • 最後に、あるフィールドで降順で並べ替え、別のフィールドで降順で並べ替えるには、2 つのパスを実行します。最初はセカンダリ キーの昇順で並べ替え、次にプライマリ キーの降順で並べ替えます。このステップは、Python のソート安定性に依存しています。

例えば:

import operator
In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}

In [2]: fruit = sorted(d.items(), key=operator.itemgetter(0))
In [3]: sorted(fruit, key=operator.itemgetter(1), reverse=True)
Out[3]: [('apple', 5), ('orange', 5), ('banana', 3)]

詳細については、Python Sorting-HOWTO ガイドを参照してください。

于 2016-04-01T22:39:27.380 に答える