You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:24:02