[解決済み] python 辞書の値による降順での並べ替え
2022-03-02 07:49:13
質問
この辞書を、サブキーkey3の値に基づいて降順にソートしたい。以下を参照してください。
d = { '123': { 'key1': 3, 'key2': 11, 'key3': 3 },
'124': { 'key1': 6, 'key2': 56, 'key3': 6 },
'125': { 'key1': 7, 'key2': 44, 'key3': 9 },
}
ですから、最終的な辞書は次のようになります。
d = { '125': { 'key1': 7, 'key2': 44, 'key3': 9 },
'124': { 'key1': 6, 'key2': 56, 'key3': 6 },
'123': { 'key1': 3, 'key2': 11, 'key3': 3 },
}
しかし、key3の値が同じである可能性があるため、辞書eはkeyとその値の一部を失うことになる。
どうすれば実現できるのでしょうか?これはテストされたコードではありません。私はただロジックを理解しようとしているだけです。
どのように解決するのですか?
辞書には固有の順序がない . というか、その固有の順序は "任意であるがランダムではない" なので、何の役にも立たない。
別の言い方をすれば、あなたの
d
と、あなたの
e
は全く同等の辞書となる。
ここでできることは
OrderedDict
:
from collections import OrderedDict
d = { '123': { 'key1': 3, 'key2': 11, 'key3': 3 },
'124': { 'key1': 6, 'key2': 56, 'key3': 6 },
'125': { 'key1': 7, 'key2': 44, 'key3': 9 },
}
d_ascending = OrderedDict(sorted(d.items(), key=lambda kv: kv[1]['key3']))
d_descending = OrderedDict(sorted(d.items(),
key=lambda kv: kv[1]['key3'], reverse=True))
オリジナルの
d
には任意の順序があります。
d_ascending
は、あなたが
思い
を使用すると、元の
d
が、そうではありませんでした。そして
d_descending
には、あなたが望む順序があります。
e
.
を使う必要がない場合は
e
の要素に対して反復処理を行いたいだけです。
d
を特定の順序で実行すれば、これを簡略化することができます。
for key, value in sorted(d.items(), key=lambda kv: kv[1]['key3'], reverse=True):
do_something_with(key, value)
変更後も辞書をソートした状態で維持したい場合、代わりに
OrderedDict
を使用すると、何らかのソートされた辞書が必要になります。PyPIで見つけられる多くのオプションがあり、あるものはツリーの上に実装され、あるものは
OrderedDict
必要に応じて再ソートされる、など。
関連
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pythonによる辞書の "拡張"
-
[解決済み] SQLAlchemy ORDER BY DESCENDING?
-
[解決済み】Pythonで辞書のキーをリストとして返すには?
最新
-
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 Decorator 練習問題
-
Pythonによるjieba分割ライブラリ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない