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

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

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

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

Q&A

解決済

1回答

336閲覧

結果をリストに追記する方法

mn.py

総合スコア41

Python

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

0グッド

0クリップ

投稿2020/04/13 04:02

c_dict={'a':[[1,2,3,4],[5,6,7,8],[9,10,11,12]],'b':[[20,21,22,23],[24,25,26,27],[28,29,30,31]]}
この様な辞書に入ったリストのそれぞれ要素番号3の値の増加率を、それぞれのリストに追加した形で処理したいです。
理想的な結果⇩
c_dict={'a':[[[5,6,7,8,増加率],[9,10,11,12,増加率]],'b':[[[24,25,26,27,増加率],[28,29,30,31,増加率]]]}

python

1 2d_list=[] 3e_dict={} 4for key,value in c_dict.items(): 5 for i in range(1,len(a_list)): 6 pt0=value[i][3] 7 pt1=value[i-1][3] 8 ret=pt0/pt1-1 9 pret=value[i]+[ret] 10 d_list.append(pret) 11 print(d_list) 12 e_dict[key]=[d_list] 13print(e_dict)

この様に書くと、'a'をキーとしたリストにもbの結果が追記されてしまいます。
d_list.append(pret)辺りを変更しないとダメな気がするのですが、、、

どの様に直せば良いのでしょうか?

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

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

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

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

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

nto

2020/04/13 04:19

既存の辞書内のリストに追記していきたいという事でしょうか? 理想的な結果では、元の値がなくなってしまっている様ですが、追記ではなく更新をしたいという事でしょうか?
mn.py

2020/04/13 04:34

このソースでは、新しく作ったe_dictに、元のリストに増加率を+した物を入れる様に書きました。と言うか書いたつもりですが、、、。 理想的な結果で元の値が一部消えているのは、最初の値は一つ前の要素との増加率が計算できないからです。 c_dictの要素番号3の増加率を追加したいのでこの様になりました。
guest

回答1

0

ベストアンサー

こういう事でしょうか?

python

1a_list = [1,2,3] #記載がなかった為仮定 2 3c_dict={ 4 'a':[[1,2,3,4],[5,6,7,8],[9,10,11,12]], 5 'b':[[20,21,22,23],[24,25,26,27],[28,29,30,31]] 6} 7new_dict = {} 8 9for key,value in c_dict.items(): 10 tmp = [] 11 for i in range(1, len(a_list)): 12 pt0 = value[i][3] 13 pt1 = value[i-1][3] 14 ret = pt0 / pt1 - 1 15 pret = value[i] + [ret] 16 tmp.append(pret) 17 new_dict[key] = tmp 18 19print(new_dict)

投稿2020/04/13 04:42

nto

総合スコア1438

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

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

mn.py

2020/04/13 04:56

回答ありがとうございます!!私の書き方が悪くてすみません! {'a':[[1,2,3,4],[5,6,7,8],[9,10,11,12]],'b':[[20,21,22,23],[24,25,26,27],[28,29,30,31]]} やりたいことを計算式にすると、12/8-1で、この結果を[5,6,7,8]の8の次の要素として付け加えたいのです。 なので、 {'a':[[5,6,7,8,1.0],[9,10,11,12,0.5]],'b':[[[24,25,26,27,0.17391304],[28,29,30,31,0.148148148]]} こんな風にしたいです。
mn.py

2020/04/13 05:12

なんどもすみません。 頂いたソースを実行してみたら理想の結果になっていました(^^; ただ、仮定いただいたa_listは処理回数の指定になっていると思うのですが、実際の辞書は数百のリストからなっており、ますので実際の辞書のlenをrangeに渡す様に書いたのですが、、、間違ってますでしょうか??
mn.py

2020/04/13 05:23

※a_listは誤記載でした。c_listです、、。すみません。
nto

2020/04/13 05:32

仮定したa_listについては、処理回数を入れたというよりは for i in range(1, len(a_list)):と、lenで使用するものだと思い、適当にデータを3つ入れただけでした。 c_listだった場合でも同じです。 またこのコードの場合だと len(c_list) <= len(c_dict[i][n])である事が条件になるかと思います。 この条件が守られていれば問題なく動作すると思います。
mn.py

2020/04/13 05:34

ありがとうございました!!!!!!!!!tmp = []をforの外で作っていたのでおかしかった様です! ntoさんのコードを参考に、forの下に作ったらいけました! ほんとうにありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問