基于子列表首元素分组生成嵌套列表的技术实现需求
按子列表首元素分组提取第二个元素的实现方案
需求说明
给定一个由二元子列表组成的嵌套列表,需根据每个子列表的第一个元素进行分组,将同一组内所有子列表的第二个元素收集起来,形成新的嵌套列表。要求支持:
- 任意数量的同首元素子列表
- 任意数量的唯一首元素
- 每个首元素至少对应两个子列表
输入输出示例
- 输入:
[[19, 2], [19, 3], [16, 4], [16, 5]]
输出:[[2, 3], [4, 5]] - 输入:
[[24, 0], [24, 1], [24, 2], [20, 5], [20, 6], [16, 8], [16, 9], [0, 10], [0, 11], [0, 12]]
输出:[[0, 1, 2], [5, 6], [8, 9], [10, 11, 12]] - 输入:
[[21, 0], [21, 1]]
输出:[[0, 1]] - 输入:
[[60, 1], [60, 2], [34, 5], [34, 6], [34, 7], [29, 9], [29, 10], [11, 13], [11, 14], [11, 15], [11, 16]]
输出:[[1, 2], [5, 6, 7], [9, 10], [13, 14, 15, 16]]
实现代码(Python)
from collections import defaultdict def group_by_first_element(input_list): # 用字典分组,键为子列表首元素,值为对应第二个元素的列表 groups = defaultdict(list) for key, value in input_list: groups[key].append(value) # 保持分组顺序与输入中首元素首次出现的顺序一致 seen_keys = [] result = [] for key, _ in input_list: if key not in seen_keys: seen_keys.append(key) result.append(groups[key]) return result
代码说明
- 分组逻辑:借助
defaultdict自动初始化列表类型的字典值,遍历输入列表时将每个二元组的第二个元素追加到对应首元素的列表中。 - 顺序保持:通过
seen_keys记录首元素首次出现的顺序,确保输出分组的顺序和输入中各组出现的顺序一致;若无需保持顺序,可直接简化为return list(groups.values())(Python 3.7+中字典默认保留插入顺序)。
内容的提问来源于stack exchange,提问作者AtjovDavid
相关产品推荐
相关产品推荐

