基于用户与调度列表匹配的嵌套列表元素合并求和需求
合并相同用户相同任务对应的数值列表
原始数据
a = [[24, 24, 24, 24], [24, 24, 24, 24], [24, 24, 24, 24], [7, 0, 0, 0], [1, 0, 0, 0], [17, 7, 0, 0], [6, 1, 0, 0], [0, 17, 7, 0], [0, 6, 1, 0], [0, 0, 17, 0], [0, 0, 6, 1], [0, 0, 2, 5], [0, 0, 0, 6], [0, 0, 0, 4]] users = ['Khod OR', 'Zader', 'Kamel Tor', 'Dave', 'Samir Fein', 'Chris', 'Samir Fein', 'Dave', 'Samir Fein', 'Chris', 'Samir Fein', 'Chris', 'Samir Fein', 'Dave'] schedules = ['ItSupport', 'NetworkOps', 'InfraDevOps', 'DBOps', 'SecOps', 'DBOps', 'SecOps', 'DBOps', 'SecOps', 'DBOps', 'SecOps', 'DBOps', 'SecOps', 'DBOps']
需求说明
对比users和schedules列表,若同一用户对应位置的任务(schedules值)相同,则将a列表对应位置的子列表按元素位置求和合并。
示例
用户Chris出现在索引5、9、11处,对应任务均为DBOps,因此将a中对应子列表[17, 7, 0, 0]、[0, 0, 17, 0]、[0, 0, 2, 5]按位置求和,得到合并后的子列表[17,7,19,5]。
期望输出
a = [[24,24,24,24],[24,24,24,24],[24,24,24,24],[7,17,7,4],[7,7,7,7],[17,7,19,5]] users = ['Khod OR', 'Zader', 'Kamel Tor', 'Dave', 'Samir Fein', 'Chris'] schedules = ['ItSupport', 'NetworkOps', 'InfraDevOps', 'DBOps','SecOps','DBOps']
解决方案
通过字典分组实现合并逻辑,代码如下:
# 初始化分组字典,键为(用户, 任务)组合,值为对应数值列表的累加结果 grouped_data = {} # 同步遍历三个列表的对应元素 for user, task, nums in zip(users, schedules, a): key = (user, task) if key not in grouped_data: # 首次出现该用户-任务组合,直接复制子列表 grouped_data[key] = nums.copy() else: # 已有记录,按元素位置累加求和 grouped_data[key] = [sum(pair) for pair in zip(grouped_data[key], nums)] # 从分组字典拆分得到三个新列表 new_users = [k[0] for k in grouped_data.keys()] new_schedules = [k[1] for k in grouped_data.keys()] new_a = list(grouped_data.values()) # 输出结果 print("a =", new_a) print("users =", new_users) print("schedules =", new_schedules)
代码说明
- 用
zip同步遍历三个列表,保证用户、任务、数值子列表的对应关系。 - 以
(用户, 任务)作为唯一标识,将相同组合的数值子列表累加合并。 - 最后从分组字典中提取键和值,拆分得到合并后的三个目标列表。
内容的提问来源于stack exchange,提问作者Jazz365
相关产品推荐
相关产品推荐

