質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3806閲覧

Pythonで辞書型のネストの入れ子の要素でソートしたい

ogiogimaru

総合スコア39

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/15 04:41

編集2021/05/15 05:03
{"key1": {"ke2":hoge, "ke3":float型の数値}} . . . {"keyn": {"ke2":hoge, "ke3":float型の数値}}

上記のようなn個辞書型のネスト構造をつくり、入れ子の中のkey3の要素でソートしたいと考えたのですが、うまくいきません。以下のようなコードも試して見たのですがエラーを吐かれました。

dic = sorted(dic.items(), reverse = True, key = lambda x: x[1])

TypeError: '<' not supported between instances of 'dict' and 'dict'

どのような処理をすればkey3の値でソートできるのでしょうか。何卒ご教授よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2021/05/15 04:51

最初のコードブロック、key1..k2yn ke2 ke3 の部分は ”” で括った文字列リテラルの意図でしょうか? Pythonのコードに見えるように書き換えた方が意図が伝わりやすいと思います。
ogiogimaru

2021/05/15 05:03

ご指摘ありがとうございます。たしかにそのとおりです。修正いたしました。
guest

回答2

0

ベストアンサー

具体的な input が示されていないので勘違いしているかもしれません。
元の辞書名を org として共通の ke3 で降順にソートしたいと読み取るとこんな感じかな

Python

1dic = {k: org[k] for k in sorted(org, reverse=True, key=lambda x: org[x][ke3])}

投稿2021/05/15 05:01

lehshell

総合スコア1156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ogiogimaru

2021/05/15 05:07

ありがとうございます!ソートして出力されました! k: org[k] と sorted(org, reverse=True, key=lambda x: org[x][ke3]) の関係がよくわかりません。解説をお願いしてもよろしいでしょうか。
lehshell

2021/05/15 05:31

input は辞書を要素に持つ辞書の理解であっていたわけですね。 sorted() の第一引数に辞書を渡すと戻り値は辞書のKEYからなるリストです。これを辞書内包表記を使用して取り出した KEY つまり k を使って k:org[k] で辞書を再構築しています。 (辞書の順序が保証されたのは Python 3.7 以降ですのでバージョンに気を付けてください。)
ogiogimaru

2021/05/15 05:40

なるほどです。sorted(org, ~~)でorgのキーを取り出して、key=lambda x: org[x][ke3]でそのキーのkey3に注目しているということでしょうか。 lambda関数についてまだまだ理解が浅いことがわかりました。ありがとうございました!
guest

0

ソート対象を辞書のリストと仮定しました。

Python

1a = [{'1': {'2':'hoge', '3':1.0}}, {'1': {'2':'hoge', '3':2.5}}] 2b = sorted(a, reverse = True, key = lambda x: x[list(x.keys())[0]][list(x[list(x.keys())[0]].keys())[1]]) 3print(b) 4# [{'1': {'2': 'hoge', '3': 2.5}}, {'1': {'2': 'hoge', '3': 1.0}}]

投稿2021/05/15 05:08

meg_

総合スコア10760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問