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

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

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

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

Q&A

解決済

1回答

673閲覧

辞書の内容を入れ替えたい

k0908

総合スコア102

Python

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

0グッド

0クリップ

投稿2018/05/09 06:13

辞書の内容を入れ替えたい。

{"A": {"a1": [[10.0, 5.0], [7.0, 7.0], [1.0, 5.0], [20.0, 30.0]], "a2": [[50.0, 50.0], [55.0, 60.0]], "a3": [[40.0, 100.0], [100.0, 200.0], [100.0, 140.0], [200.0, 190.0]], "a4": [[50.0, 70.0], [140.0, 130.0], [160.0, 150.0], [200.0, 180.0]], "a5": [[100.0, 110.0], [180.0, 210.0], [60.0, 50.0], [200.0, 190.0]] } } 

という辞書dfがある。

この辞書の

[[10.0, 5.0], [7.0, 7.0], [1.0, 5.0], [20.0, 30.0]]

[[50.0, 50.0], [55.0, 60.0]]

の要素(*とする)の奇数の部分と偶数の部分を分解して、
[10.0,7.0, 1.0,20.0]・・・①と[5.0,7.0, 5.0, 30.0]・・・②という形にして、
①と②の配列を使った計算結果xを*の部分に入れたい。

for ky, vl in df.items(): sub_dict={} for k,v in vl.items(): a_li = [] b_li = [] for i in range(len(v)): a_li.append(v[i][0]) b_li.append(v[i][1]) #①と②の配列を使った計算結果xを取得するAメソッド d = {k:A(a_li,b_li)} sub_dict[k] = d sub1_dict={} for i,j in sub_dict.items(): sub1_dict[i] = j element[ky]=sub1_dict print(element)

とコードを書くと、
{‘A’: {‘a1’: {‘a1’:0.04},‘a2’: {‘a2’:0.01},‘a3’: {‘a3’:0.05}, ‘a4’:{‘a4’:0.06} , ‘a5’:{‘a5’:0.07} }} 
という形になり、{‘a1’: {‘a1’:0.04}の部分が冗長になる。
理想のアウトプットは、
{‘A’: {‘a1’:0.04,‘a2’:0.01,‘a3’:0.05,’a4’:0.06,‘a5’:0.07}} の形にすることである。
コードのどの部分を修正すればいいのだろうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

直接放り込めばいいのでは?

Python

1sub_dict[k] = A(a_li, b_li)

ついでに

リファクタしてみた。

Python

1result = { 2 s: { 3 key: A(*zip(*value)) for key, value in df[s].items() 4 } 5 for s in df 6} 7 8print(result)

同じ結果になるはず。

投稿2018/05/09 06:18

編集2018/05/09 06:29
LouiS0616

総合スコア35658

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

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

k0908

2018/05/09 06:27

sub_dict[k] = A(a_li, b_li) df[ky]=sub_dict とするということでしょうか? その結果、今と同じ結果になります・・・。
LouiS0616

2018/05/09 06:28

d = {k:A(a_li,b_li)} sub_dict[k] = d ↑この二行を、回答のように書き換えればいいということです。
k0908

2018/05/09 06:30

ありがとうございます。できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問