在python中将两个用户数据字典数据合并到一个具有相同用户数据的字典中

2024-04-25 20:18:28 发布

您现在位置:Python中文网/ 问答频道 /正文

这里解释了这个问题。我有一个用户有多个技能。用不同的技能数据显示问题数据 解决方案我需要相同的用户的技能将在相同的数组数据。你知道吗

问题:数据类型如下:

{
    'group'= 'GR-A',
    'users'=[   {
                    'id' = 1,
                    'name' = 'A'
                    'skills' = {
                        'id' = 1
                        'name' = 'skill-A'
                    }
                },
                {
                    'id' = 1,
                    'name' = 'A'
                    'skills' = {
                        'id' = 2
                        'name' = 'skill-B'
                    }
                },
                {
                    'id' = 2,
                    'name' = 'B'
                    'skills' = {
                        'id' = 2
                        'name' = 'skill-B'
                    }
                },
            ]
}

需要的数据解决方案:

{   'group'= 'GR-A',    'users'=[   {
                    'id' = 1,
                    'name' = 'A'
                    'skills' = [
                        {
                            'id' = 1
                            'name' = 'skill-A'
                        },
                        {
                            'id' = 2
                            'name' = 'skill-B'
                        }
                    ]
                },
                {
                    'id' = 2,
                    'name' = 'B'
                    'skills' = [
                        {
                            'id' = 2
                            'name' = 'skill-B'
                        }
                    ]
                },          ] }

Tags: 数据用户nameid技能group数组解决方案
1条回答
网友
1楼 · 发布于 2024-04-25 20:18:28

考虑到提供的字典是有效的,可以使用itertools.groupby函数对perticluar键进行分组。你知道吗

检查以下代码

from itertools import groupby
from pprint import pprint

data = {'group': 'GR-A', 'users': [{'id': 1, 'name': 'A', 'skills': {'id': 1, 'name': 'skill-A'}},
                                   {'id': 1, 'name': 'A', 'skills': {'id': 2, 'name': 'skill-B'}},
                                   {'id': 2, 'name': 'B', 'skills': {'id': 2, 'name': 'skill-B'}}]}

users = []
for k, v in groupby(data['users'], key=lambda x: x['id']):
    temp = {}
    for temp_dict in v:
        temp = dict(temp, **{k: v for k, v in temp_dict.items() if k != 'skills'})
        if temp.get('skills') is not None or temp.get('skills') == []:
            temp['skills'].append(temp_dict.get('skills'))
        else:
            temp['skills'] = []
            temp['skills'].append(temp_dict.get('skills'))
    users.append(temp)
data['users'] = users

pprint(data)

提供输出:

{'group': 'GR-A',
 'users': [{'id': 1,
            'name': 'A',
            'skills': [{'id': 1, 'name': 'skill-A'},
                       {'id': 2, 'name': 'skill-B'}]},
           {'id': 2, 'name': 'B', 'skills': [{'id': 2, 'name': 'skill-B'}]}]}

相关问题 更多 >