如何在Python中从不同元组按团队匹配Dev与BA生成新元组
解决方案:同团队Dev与BA配对生成新元组
首先,咱们得先把原始的扁平元组转换成结构化的数据,这样才能方便按团队分组配对。原始的devTuple和baTuple都是每3个元素代表一个人员的信息(ID、名称、所属团队),所以第一步先把它们拆分成人员列表,再按团队归类,最后完成同团队的配对。
步骤1:拆分扁平元组为结构化人员列表
先写个小函数,把长元组拆成每3个元素一组的人员信息元组:
def split_tuple_to_people(tuple_data): # 每3个元素为一组,拆分成(id, name, team)的元组列表 return [tuple_data[i:i+3] for i in range(0, len(tuple_data), 3)]
步骤2:按团队分组Dev和BA
把拆分后的Dev和BA列表按团队分组,方便后续配对:
from collections import defaultdict # 拆分原始元组 dev_list = split_tuple_to_people(devTuple) ba_list = split_tuple_to_people(baTuple) # 按团队分组Dev dev_by_team = defaultdict(list) for dev in dev_list: dev_by_team[dev[2]].append(dev) # 按团队分组BA ba_by_team = defaultdict(list) for ba in ba_list: ba_by_team[ba[2]].append(ba)
步骤3:同团队配对并生成新元组
遍历每个团队,把该团队的Dev和BA一一配对,最后把所有配对结果合并成一个新元组:
paired_result = [] # 遍历所有团队 for team in teamlist: # 获取当前团队的Dev和BA列表 team_devs = dev_by_team.get(team, []) team_bas = ba_by_team.get(team, []) # 一一配对(如果数量不一致,会以较短的列表长度为准) for dev, ba in zip(team_devs, team_bas): paired_result.append((dev, ba)) # 转换为最终的元组 final_paired_tuple = tuple(paired_result) # 打印结果看看 for pair in final_paired_tuple: print(f"Dev: {pair[0]} | BA: {pair[1]}")
补充说明
- 如果某个团队的Dev和BA数量不一致,
zip()会自动以较短的列表长度为准,多余的人员不会被配对。如果你想保留所有人员(比如用None填充空缺),可以改用itertools.zip_longest。 - 最终的
final_paired_tuple里的每个元素都是一个包含Dev信息元组和BA信息元组的元组,比如((1, 'Dev1', 'T1'), (1, 'BA1', 'T1'))。
内容的提问来源于stack exchange,提问作者Sri Chin
相关产品推荐
相关产品推荐

