Python如何将字典同键下的多个子列表合并为单个列表
Python字典同键下嵌套子列表按序拼接方案
问题场景
现有Python字典,单个键对应多个嵌套子列表,原始字典结构如下:
{1: [[1, 2, 3, 4, 5, 6, 7], [5, 1, 4, 34, 3, 65, 0, 2], [2, 5, 4, 5, 7, 8, 4, 7]], 2: [[1, 5, 4, 5, 0, 1, 4, 6], [2, 2, 3, 5, 6, 6, 3, 9]], 3: [[12, 35, 42, 53, 70, 71, 74, 76], [6, 11, 16, 17, 38, 62, 66, 77]]}
需要将每个键对应的所有子列表按原有顺序拼接为一个长列表,最终输出格式要求如下:
{1: [[1, 2, 3, 4, 5, 6, 7, 5, 1, 4, 34, 3, 65, 0, 2, 2, 5, 4, 5, 7, 8, 4, 7]], 2: [[1, 5, 4, 5, 0, 1, 4, 6, 2, 2, 3, 5, 6, 6, 3, 9]], 3: [[12, 35, 42, 53, 70, 71, 74, 76, 6, 11, 16, 17, 38, 62, 66, 77]]}
实现代码
写法1:字典推导式(简洁高效,推荐)
核心逻辑是遍历字典每个键值对,通过两层列表推导把同键下所有子列表的元素按顺序提取,最后在外层包裹一层列表匹配目标格式。
original_dict = {1: [[1, 2, 3, 4, 5, 6, 7], [5, 1, 4, 34, 3, 65, 0, 2], [2, 5, 4, 5, 7, 8, 4, 7]], 2: [[1, 5, 4, 5, 0, 1, 4, 6], [2, 2, 3, 5, 6, 6, 3, 9]], 3: [[12, 35, 42, 53, 70, 71, 74, 76], [6, 11, 16, 17, 38, 62, 66, 77]]} result_dict = { key: [[item for sublist in value for item in sublist]] for key, value in original_dict.items() }
写法2:普通for循环(逻辑直观,便于扩展)
如果需要在拼接过程中增加去重、过滤等额外逻辑,用for循环写法更方便调整:
result_dict = {} for key, sublists in original_dict.items(): merged_list = [] for sublist in sublists: # 用extend把当前子列表的元素逐个加入合并列表,避免嵌套 merged_list.extend(sublist) # 合并完成后外层套一层列表,匹配目标输出格式 result_dict[key] = [merged_list]
常见失败原因
之前尝试推导式、循环没得到预期结果,基本是以下两个问题:
- 拼接时用
append代替extend添加子列表,导致元素没有拍平,还是多层嵌套结构 - 合并得到长列表后,忘记在外层包裹一层
[],导致键对应的值直接是长列表,不符合要求的嵌套格式
执行上述代码后打印result_dict,即可得到完全匹配要求的输出结果。
内容的提问来源于stack exchange,提问作者ramsey
相关产品推荐
相关产品推荐

