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

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

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

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

解決済

Pythonのアルゴリズムでどのように実装すれば良いのか答えがでません。

taku-s
taku-s

総合スコア3

Python

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

2回答

0評価

0クリップ

204閲覧

投稿2022/07/06 01:16

前提

Pythonでコードを書いています。
アルゴリズムに関して実現したいことがあるのですが、わかりそうでわからない為時間がかかっています。
是非お力添えいただきたいです。

実現したいこと

以下のリストを加工してまとめたいです。

python

[ {'ID': 1, 'fruits': 'りんご', 'total ': 1, 'product': ['青森'], 'counts': [1], 'remarks': ['酸味']}, {'ID': 2, 'fruits': 'もも', 'total': 2, 'product': ['山梨'], 'counts': [2], 'remarks': ['甘味']}, {'ID': 3, 'fruits': 'ぶどう', 'total': 1, 'product': ['山梨'], 'counts': [1], 'remarks': ['酸味']}, {'ID': 2, 'fruits': 'もも', 'total': 1, 'product': ['福島'], 'counts': [1], 'remarks': ['甘味']}, {'ID': 5, 'fruits': 'みかん', 'total': 1, 'product': ['愛媛'], 'counts': [1], 'remarks': ['うま味']}, {'ID': 5, 'fruits': 'みかん', 'total': 3, 'product': ['和歌山'], 'counts': [3], 'remarks': ['酸味']}, {'ID': 1, 'fruits': 'りんご', 'total': 2, 'product': ['福島'], 'counts': [2], 'remarks': ['酸味']}, {'ID': 5, 'fruits': 'みかん', 'total': 2, 'product': ['静岡'], 'counts': [2], 'remarks': ['苦味']}, ]
  • リスト内にdict型の値が入っています。
  • keyである"ID"が決まれば"fruits"も決まります。
  • 辞書型のkeyである'product''counts''remarks'の値はリスト型です。

纏めた結果は以下となります。

python

[ {'ID': 1, 'fruits': 'りんご', 'total': 3, 'product': ['青森', '福島'], 'counts': [1,2], 'remarks': ['酸味','酸味']}, {'ID': 2, 'fruits': 'もも', 'total': 3, 'product': ['山梨', '福島'], 'counts': [2,1], 'remarks': ['甘味','甘味']}, {'ID': 3, 'fruits': 'ぶどう', 'total': 1, 'product': ['山梨'], 'counts': [1], 'remarks': ['酸味']}, {'ID': 5, 'fruits': 'みかん', 'total': 6, 'product': ['愛媛','和歌山','静岡'], 'counts': [1,3,2], 'remarks': ['うま味','酸味','苦味']}, ]
  • 'ID'及び'fruits'が重複しないように辞書型をまとめ、'product''counts''remarks'の値をリストに追加していく。
  • countsの値であるリストの合計が'total'の合計となる。

該当のソースコード

python

list = [ {'ID': 1, 'fruits': 'りんご', 'total ': 1, 'product': ['青森'], 'counts': [1], 'remarks': ['酸味']}, {'ID': 2, 'fruits': 'もも', 'total': 2, 'product': ['山梨'], 'counts': [2], 'remarks': ['甘味']}, {'ID': 3, 'fruits': 'ぶどう', 'total': 1, 'product': ['山梨'], 'counts': [1], 'remarks': ['酸味']}, {'ID': 2, 'fruits': 'もも', 'total': 1, 'product': ['福島'], 'counts': [1], 'remarks': ['甘味']}, {'ID': 5, 'fruits': 'みかん', 'total': 1, 'product': ['愛媛'], 'counts': [1], 'remarks': ['うま味']}, {'ID': 5, 'fruits': 'みかん', 'total': 3, 'product': ['和歌山'], 'counts': [3], 'remarks': ['酸味']}, {'ID': 1, 'fruits': 'りんご', 'total': 2, 'product': ['福島'], 'counts': [2], 'remarks': ['酸味']}, {'ID': 5, 'fruits': 'みかん', 'total': 2, 'product': ['静岡'], 'counts': [2], 'remarks': ['苦味']}, ] new_list = [] for data in list: for new_data in new_list: if not data["ID"] in new_data["ID"]: new_list.append({'ID':data["ID"],'fruits':data["fruits"]})

試したこと

⑴新たなリストnew_listを用意してlistをループで回す。
⑵new_listの中にlistのデータ”ID”と"fruits"がなければappendしていく。
⑶リストが回し終わったら、再度new_listを回し、counts内の数字を足してtotalの値を書き換える。
という流れになるとおもうのですが、⑴と⑵がうまく実装できません。

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

Python3.7.9を使用

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

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