このような表形式のデータを、 group_id ごとに name でまとめたい場合です。
| group_id | name |
|---|---|
| monogatari | 化物語 |
| monogatari | 傷物語 |
| monogatari | 偽物語 |
| monogatari | 猫物語 |
| monogatari | 傾物語 |
| monogatari | 花物語 |
| monogatari | 囮物語 |
| monogatari | 鬼物語 |
| monogatari | 恋物語 |
| monogatari | 憑物語 |
| monogatari | 暦物語 |
| monogatari | 終物語 |
| monogatari | 続・終物語 |
| toaru | とある魔術の禁書目録 |
| toaru | 新約 とある魔術の禁書目録 |
| toaru | とある魔術の禁書目録SP |
| toaru | とある科学の超電磁砲 |
| toaru | とある科学の超電磁砲 アストラル・バディ |
itertools の groupby と、operator の itemgetter を利用すれば1行で実現できます。
from itertools import groupby
from operator import itemgetter
items = [
{'group_id': 'monogatari', 'name': '化物語'},
{'group_id': 'monogatari', 'name': '傷物語'},
{'group_id': 'monogatari', 'name': '偽物語'},
{'group_id': 'monogatari', 'name': '猫物語'},
{'group_id': 'monogatari', 'name': '傾物語'},
{'group_id': 'monogatari', 'name': '花物語'},
{'group_id': 'monogatari', 'name': '囮物語'},
{'group_id': 'monogatari', 'name': '鬼物語'},
{'group_id': 'monogatari', 'name': '恋物語'},
{'group_id': 'monogatari', 'name': '憑物語'},
{'group_id': 'monogatari', 'name': '暦物語'},
{'group_id': 'monogatari', 'name': '終物語'},
{'group_id': 'monogatari', 'name': '続・終物語'},
{'group_id': 'toaru', 'name': 'とある魔術の禁書目録'},
{'group_id': 'toaru', 'name': '新約 とある魔術の禁書目録'},
{'group_id': 'toaru', 'name': 'とある魔術の禁書目録SP'},
{'group_id': 'toaru', 'name': 'とある科学の超電磁砲'},
{'group_id': 'toaru', 'name': 'とある科学の超電磁砲 アストラル・バディ'},
]
lists = {g: [x['name'] for x in list(n)] for (g, n) in groupby(items, key=itemgetter('group_id'))}
lists には以下のようにデータが入ります。
{
"monogatari": [
"化物語",
"傷物語",
"偽物語",
"猫物語",
"傾物語",
"花物語",
"囮物語",
"鬼物語",
"恋物語",
"憑物語",
"暦物語",
"終物語",
"続・終物語"
],
"toaru": [
"とある魔術の禁書目録",
"新約 とある魔術の禁書目録",
"とある魔術の禁書目録SP",
"とある科学の超電磁砲",
"とある科学の超電磁砲 アストラル・バディ"
]
}
注意点としては、 items はグループ化に使うキー(ここでは group_id )でソートされている必要があります。