Python如何提取字典id作为主键合并员工多角色数据
Python字典数据转换实现
原始输入数据
{ 'Owner': [ {'id': '1', 'name': 'John', 'contactEmail': 'john@nif.com', 'role': 'Owner'}, {'id': '2', 'contactName': 'Work', 'contactEmail': 'work@nif.com', 'role': 'Owner'} ], 'Manager': [ {'id': '1', 'name': 'John', 'contactEmail': 'john@nif.com', 'role': 'Manager'} ] }
处理规则
- 将
id提取到外层作为主键 - 所有处理后的数据放入新键
'employee'下 - 同一id对应的多个role需合并为数组
- 示例:id=1同时有Owner和Manager角色,输出为
role:['Manager', 'Owner']
预期输出
{ 'employee': { '1': {'email': 'john@nif.com', 'name': 'John', 'role': ['Owner', 'Manager']}, '2': {'email': 'work@nif.com', 'name': 'Work', 'role': ['Owner']} } }
补全后的实现代码
原有代码问题为直接覆盖emp的键,未做id去重和角色合并,修改后代码如下:
emp = {'employee': {}} # event为原始数据变量 for role_group, user_list in event.items(): for user in user_list: user_id = user['id'] # 该id不存在时先初始化用户基础信息 if user_id not in emp['employee']: emp['employee'][user_id] = { 'name': user.get('name') or user.get('contactName'), # 兼容两种姓名字段 'email': user['contactEmail'], 'role': [] } # 追加当前角色到数组,可自行加去重判断避免重复角色 emp['employee'][user_id]['role'].append(user['role'])
逻辑说明
- 初始化时直接在
emp中创建employee空字典,专门存放以id为键的用户数据 - 遍历每个角色分组下的所有用户,先判断用户id是否已存在,不存在则初始化基础信息
- 兼容
name和contactName两种姓名字段,适配原始数据中id为2的用户字段差异 - 每次遍历都将当前用户的角色追加到对应id的role数组中,自动实现多角色合并
如果需要避免重复的role,可以在追加前加if user['role'] not in emp['employee'][user_id]['role']的判断逻辑
内容的提问来源于stack exchange,提问作者sim
相关产品推荐
相关产品推荐

