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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

400閲覧

リストの形を変更したい

sasaki0628

総合スコア106

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/01/15 05:23

編集2023/01/15 06:00

リスト型のデータを以下のように変更したいと思っています。

変更前データ

data =[ { "id": 1, "fruits": "apple", "cd": 1, "cd_val": "Hokkaido", }, { "id": 1, "fruits": "apple", "cd": 2, "cd_val": "Aomori" }, { "id": 1, "fruits": "apple", "cd": 4, "cd_val": "Iwate", }, { "id": 2, "fruits": "banana", "cd": 5, "cd_val": "Yamagata", }, { "id": 3, "fruits": "grape", "cd": 3, "cd_val": "Akita", }, { "id": 3, "fruits": "grape", "cd": 6, "cd_val": "Miyagi", }, { "id": 3, "fruits": "grape", "cd": 7, "cd_val": "Niigata", }, ]

変更後データ

result =[ { "id": 1, "fruits": "apple", "cd": [1,2,4], "cd_val": ["Hokkaido","Aomori","Iwate"] }, { "id": 2, "fruits": "banana", "cd": [5], "cd_val": ["Yamagata"] }, { "id": 3, "fruits": "grape", "cd": [3,6,7], "cd_val": ["Akita","Miyagi","Niigata"] } ]

別の質問で教えてもらったコード

from itertools import groupby result = [ {'id': k[0], 'fruits': k[1], 'cd': [e['cd'] for e in group]} for k, group in groupby(data, lambda e: (e['id'], e['fruits'])) ] print(result)
>>> print(result) [{'id': 1, 'fruits': 'apple', 'cd': [1, 2, 4]}, {'id': 2, 'fruits': 'banana', 'cd': [5]}, {'id': 3, 'fruits': 'grape', 'cd': [3, 6, 7]}]

groupby は使用した場合は、条件が複数("cd"と"cd_val")あるときは書くのが難しいでしょうか。

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

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

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

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

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

mather

2023/01/15 06:13

- まずはご自身で試してみましょう。やってみてうまくいかないことを質問しましょう。 - 「別の質問」のURLをこの質問に記載しましょう。
guest

回答1

0

自己解決

こちらのコードを利用して考えてみます。

result = [] keyfunc = lambda x: x['id'] for k, g in groupby(sorted(data, key=keyfunc), keyfunc): g = list(g) result.append({'id': k, 'fruits': g[0]['fruits'], 'cd': [i['cd'] for i in g],'cd_val': [i['cd_val'] for i in g]})

投稿2023/01/15 06:04

編集2023/01/15 06:08
sasaki0628

総合スコア106

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問