[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
2022-03-11 06:58:06
質問
データベース内の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によるExcelファイルの一括操作の説明
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python関数の高度な応用を解説
-
Python Decorator 練習問題
-
python implement mysql add delete check change サンプルコード
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] Pythonで辞書のキーをソートする [重複]。