やりたい事
python
1dic1 = {"りんご":{"key1":"フルーツ", "key2":"赤"}, "バナナ":{"key1":"くだもの", "key2":"黄色"}, "ぶどう":{"key1":"果物", "key2":"紫"}} 2 3dic2 = {"メロン":{"key1":"果実", "key2":"緑"}, "ぶどう":{"key1":"くだもの", "key2":"むらさき"}, "梨":{"key1":"くだもの", "key2":"黄色"}} 4 5dic3 = {"メロン":{"key1":"くだもの", "key2":"みどり色"}, "りんご":{"key1":"果実", "key2":"真っ赤"}, "バナナ":{"key1":"フルーツ", "key2":"黄色い"}} 6 7dic4 = {"りんご":{"key1":"くだもの", "key2":"赤い"}, "さくらんぼ":{"key1":"くだもの", "key2":"赤"}, "バナナ":{"key1":"くだもの", "key2":"Yellow"}} 8
この辞書を結合させて
下のような結果にさせたいと思っております。
(改行、辞書内の辞書の順番にこだわりはありません)
python
1{{"りんご":{"key1":["フルーツ","果実","くだもの"], "key2":["赤","真っ赤"]}, 2"バナナ":{"key1":["くだもの","フルーツ","くだもの"], "key2":["黄色","黄色い","Yellow"]}, 3"ぶどう":{"key1":["果物","くだもの"], "key2":["紫","むらさき"]}, 4"メロン":{"key1":["果実","くだもの"], "key2":["緑","みどり色"]}, 5"梨":{"key1":"くだもの", "key2":"黄色"}, 6"さくらんぼ":{"key1":"くだもの", "key2":"赤"}}
試した事
私の考えたやり方だと
①dic1 を空のnew_dicに追加
②dic2のキー(りんご、バナナ、ぶどうなど)がnew_dicに存在するか1つずつ確認
↓
もし存在するならリストに重複したキーの値(new_dicとdic2のkey1,key2の値)のをリストに格納
↓
リストを重複したnew_dicの重複したキーの値に入れる
↓
存在しないならそのままdic2のキーと値(辞書)をnew_dicに追加
③dic3のキーがnew_dicに存在するか1つずつ確認
↓
もし存在するならリストに重複したキーの値(new_dicとdic3のkey1,key2の値)のをリストに格納
↓
もしnew_dicの方で重複したキーのkey1, key2の値がリスト型なら
↓
一つずつ取り出し空のリストに追加、続いてdic3のキーも追加
↓
纏めたリストをnew_dicで重複したキーに対するkey1,key2にリストとして上書き
↓
存在しないならそのままdic3のキーと値(辞書)をnew_dicに追加
これをやってみようと思い下の様に書いてみました。
python
1new_dic = {} 2for k, v in dic1.items(): 3 new_dic[k] = v 4 5key1 = [] 6key2 = [] 7for dic2_k, dic2_v in dic2.items(): 8 for new_dic_k, new_dic_v in new_dic.items(): 9 if dic2_k == new_dic_k: 10 key1.append(new_dic_v["key1"]) 11 key2.append(new_dic_v["key2"]) 12 key1.append(dic2_v["key1"]) 13 key2.append(dic2_v["key2"]) 14 new_dic_v["key1"] = key1 15 new_dic_v["key2"] = key2 16 else: 17 new_dic[dic2_k] = dic2_v 18print(new_dic)
こちらだと下のエラーが出されてしまいます。
RuntimeError: dictionary changed size during iteration
内容としては辞書でループ処理をさせて
辞書(私の場合はnew_dic)のサイズが変わってしまうとエラーになってしまうとの事なのではないかと思いました。
else:を消してやってみたり
new_dicをループをさせずに
dic2_k in new_dicなどでやってみましたが
なかなかうまくいかずこちらで質問させて頂きました。
二つの辞書(new_dic、dic2)でキーが重複したらnew_dicで重複したキーの値に追加させて
重複していなかったら
そのままキーと値をnew_dicに追加させるやり方だけでも
教えていただけると嬉しいです。
是非宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/14 09:32
2021/12/14 09:35
退会済みユーザー
2021/12/14 09:49
2021/12/14 09:56 編集