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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

Q&A

解決済

2回答

344閲覧

Pythonで辞書型からソートしたデータをリストに入れる方法について

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

0グッド

0クリップ

投稿2018/07/11 00:43

前提・実現したいこと

Pythonで1つのキーに対して複数の要素を持つ辞書型をソートし、
1対1の単語の組みを作成した上で、以下のようなリストを作成しようとしています。

state_city = [('Tokyo', 'Ginza'), ('Kanagawa', 'Kamakura']]

発生している問題・エラーメッセージ

1つのキーに対して複数の要素を持つ辞書型をソートし、
1対1の単語の組みは出力できたのですが、
ここから実現したいリストの形にデータ構造を変更する方法がわかりません。

該当のソースコード

Python

1words_matrix = {'Tokyo': {'Shinjuku': 0.9, 'Ginza': 0.98, 'Shibuya':0.7}, 'Kanagawa':{'Yokohama': 0.88, 'Kamakura': 0.9, 'Minatomirai':0.66}} 2 3import operator 4for outer_key, inner_dict in words_matrix.items(): 5 inner_sorted_items = sorted( 6 inner_dict.items(), 7 reverse=True, 8 key=operator.itemgetter(-1) 9 ) 10 11 print(f'{outer_key}:') 12 for k, v in inner_sorted_items[:1]: 13 print(f'- {k}') 14

出力

Tokyo: - Ginza Kanagawa: - Kamakura

補足情報(FW/ツールのバージョンなど)

Python3.6.3

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

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

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

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

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

guest

回答2

0

ベストアンサー

値が最大をとるキーを得る問題と捉えると、以下のように書けます。
参考:Pythonで辞書の値の最大値・最小値とそのキーを取得

Python

1words_matrix = {'Tokyo': {'Shinjuku': 0.9, 'Ginza': 0.98, 'Shibuya':0.7}, 'Kanagawa':{'Yokohama': 0.88, 'Kamakura': 0.9, 'Minatomirai':0.66}} 2ret = [] 3for outer_key, inner_dict in words_matrix.items(): 4 max_k = max(inner_dict, key=inner_dict.get) # 値が最大をとるキーを返す 5 ret.append((outer_key,max_k)) 6print(ret)

投稿2018/07/11 01:01

can110

総合スコア38256

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

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

退会済みユーザー

退会済みユーザー

2018/07/11 01:09

ご回答いただきましてありがとうございます。
guest

0

そこまで出来たなら、あとはリストに突っ込むだけです。

python

1words_matrix = {'Tokyo': {'Shinjuku': 0.9, 'Ginza': 0.98, 'Shibuya':0.7}, 'Kanagawa':{'Yokohama': 0.88, 'Kamakura': 0.9, 'Minatomirai':0.66}} 2 3import operator 4lst = [] 5for outer_key, inner_dict in words_matrix.items(): 6 inner_sorted_items = sorted( 7 inner_dict.items(), 8 reverse=True, 9 key=operator.itemgetter(-1) 10 ) 11 12 lst.append((outer_key, inner_sorted_items[0][0])) 13print(lst) # => [('Kanagawa', 'Kamakura'), ('Tokyo', 'Ginza')] 14

投稿2018/07/11 00:49

hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/07/11 01:09

ご回答いただきましてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問