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

时间:2018-10-27 06:25:21

标签: python arrays json python-3.x

我有一个json,它是字典列表,看起来像这样:

我正在从mysql中使用pymysql

[{
    "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"
}]

我需要对其进行分组,以便每个“名称”只有一个字典,并且将包含该名称下的所有组的列表。 像这样的东西:

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

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

1 个答案:

答案 0 :(得分: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)

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