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

Python实现按公司轮询分组人员JSON数据

Python实现按公司轮询分组功能

需求说明

给定人员数据列表,需按照公司轮询规则完成分组:

  • 每个分组中,同一公司最多仅能包含1名未完成分组的人员
  • 持续轮询选取人员,直到所有人员均完成分组
  • 最终输出以group1、group2...为键的分组字典

实现代码

from collections import defaultdict
import json

def group_by_company_round_robin(people):
    # 按公司归类人员,并将每个公司的人员列表转为迭代器
    company_groups = defaultdict(list)
    for person in people:
        company_groups[person["company"]].append(person)
    
    company_iterators = {comp: iter(members) for comp, members in company_groups.items()}
    
    groups = {}
    group_count = 1
    
    while company_iterators:
        current_group = []
        # 遍历当前仍有剩余人员的公司(转成list避免迭代时修改字典)
        for comp in list(company_iterators.keys()):
            try:
                # 取出该公司下一名人员
                current_group.append(next(company_iterators[comp]))
            except StopIteration:
                # 该公司人员已全部分配,移除迭代器
                del company_iterators[comp]
        
        if current_group:
            groups[f"group{group_count}"] = current_group
            group_count += 1
    
    return groups

# 示例数据
sample_data = [
    {"id": 1, "first_name": "John", "last_name": "Doe", "company": "ABC Corporation", "email": "john.doe@example.com"},
    {"id": 2, "first_name": "Jane", "last_name": "Smith", "company": "ABC Corporation", "email": "jane.smith@example.com"},
    {"id": 3, "first_name": "Michael", "last_name": "Johnson", "company": "ABC Corporation", "email": "michael.johnson@example.com"},
    {"id": 4, "first_name": "Emily", "last_name": "Brown", "company": "BestCo", "email": "emily.brown@example.com"},
    {"id": 5, "first_name": "David", "last_name": "Lee", "company": "BestCo", "email": "david.lee@example.com"},
    {"id": 6, "first_name": "Sophia", "last_name": "Wang", "company": "Innovate Solutions", "email": "sophia.wang@example.com"}
]

# 执行并输出结果
output = group_by_company_round_robin(sample_data)
print(json.dumps(output, indent=2))

代码说明

  1. 分组与迭代器转换:先将人员按公司归类,再把每个公司的人员列表转为迭代器,无需手动管理索引即可逐个取出人员。
  2. 轮询分组逻辑:循环遍历所有仍有剩余人员的公司,每轮从每个公司取1人组成分组;若某公司人员已全部分配,则移除该公司的迭代器,不再参与后续轮询。
  3. 结果构建:每轮生成的分组以groupN为键存入结果字典,直到所有人员完成分组。

内容的提问来源于stack exchange,提问作者Russell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:16:02