通过Python中的可重复键对字典的JSON数组进行分组和排序

问题描述 投票:1回答:1

我有一个json,它是一个字典列表,如下所示:

我用pymysql从MySQL获取它

[{
    "id": "123",
    "name": "test",
    "group": "test_group"
},
{
    "id": "123",
    "name": "test",
    "group": "test2_group"
},
{
    "id": "456",
    "name": "test2",
    "group": "test_group2"
},
{
    "id": "456",
    "name": "test2",
    "group": "test_group3"
}]

我需要对它进行分组,以便每个“名称”只有一个dict,它将包含一个以此名称命名的所有组的列表。这样的事情:

[{
    "id": "123",
    "name": "test",
    "group": ["test2_group", "test_group"]
},
{
    "id": "456",
    "name": "test2",
    "group": ["test_group2", "test_group3"]
}]

我想得到一些帮助,谢谢!

python arrays json python-3.x
1个回答
1
投票

您可以使用itertools.groupby进行数据分组。虽然我不保证下面的解决方案是最短的方式,但它应该做的工作。

# Your input data
data = [] 

from itertools import groupby

res = []
key_func = lambda k: k['id']

for k, g in groupby(sorted(data, key=key_func), key=key_func):
    obj = { 'id': k, 'name': '', 'group': []}
    for group in g:
        if not obj['name']:
            obj['name'] = group['name']
        obj['group'].append(group['group'])
    res.append(obj)

print(res)

它应该以所需的格式打印数据。

© www.soinside.com 2019 - 2024. All rights reserved.