[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
2022-03-18 20:03:32
質問内容
データベース内の2つのフィールド(文字列フィールドと数値フィールド)から読み取った値の辞書を持っています。文字列フィールドは一意であるため、これが辞書のキーとなる。
キーでソートすることはできますが、値でソートするにはどうしたらよいのでしょうか?
注:Stack Overflowの質問はこちらです。 辞書のリストを辞書の値でソートするにはどうすればよいですか? しかし、私は本当に辞書のリストを必要としないので、昇順または降順のいずれかでソートするためのより簡単なソリューションがあるかどうかを知りたかったのです。
どのように解決するのですか?
Python 3.7+ または CPython 3.6
Python 3.7+では、ディクツは挿入順序を保持します。CPython 3.6でも同じですが これは実装の詳細です。 .
>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
または
>>> dict(sorted(x.items(), key=lambda item: item[1]))
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
古いPython
辞書をソートすることはできませんが、ソートされた辞書の表現を得ることだけは可能です。辞書は本質的に無秩序ですが、リストやタプルのような他の型は無秩序ではありません。したがって、ソートされた値を表現するためには、順序付きデータ型が必要です。これは、リスト、おそらくタプルのリストになります。
例えば、以下のようなものです。
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
sorted_x
は、各タプルの2番目の要素でソートされたタプルのリストとなります。
dict(sorted_x) == x
.
そして、値ではなくキーでソートしたい人のために。
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
Python3以降では を解凍することはできません。 を使用することができます。
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])
ディクショナリーとして出力させたい場合は
collections.OrderedDict
:
import collections
sorted_dict = collections.OrderedDict(sorted_x)
関連
-
[解決済み] データ型が理解できない
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 辞書をキーでソートするにはどうしたらいいですか?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
opencvとpillowを用いた顔認証システム(デモあり)
-
python call matlab メソッドの詳細
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PythonはWordの読み書きの変更操作を実装している
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み] データ型が理解できない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み] Pythonで辞書のキーをソートする [重複]。