Python使用append追加列表出现嵌套 如何合并为单层列表
Python列表嵌套合并的解决方法
问题根因
你出现嵌套结构的核心原因是混用了两个列表方法的行为差异:
append(obj)会把传入的完整对象作为单个元素加入列表:你传入的results['Contents']本身是一个包含字典的子列表,会被整体当成objs的1个元素存储,最终objs的长度只统计你调用了多少次append,而不是子列表内部的元素数量。- 你期望的合并单层列表效果,需要的是把传入子列表的每一个字典元素逐个展开追加,而非整体嵌套存放。
解决方案
方案1:替换为extend()方法
extend(iterable)的行为就是把传入可迭代对象的所有元素逐个拆出来追加到目标列表尾部,完全匹配你的需求。
修改后的代码:
objs = [] # 替换原有的append为extend objs.extend(results['Contents']) objs.extend(l_objs['Contents']) print(len(objs)) # 输出6,符合预期的单层列表结构
方案2:简化写法
如果是在循环流程中反复获取xxx['Contents']结构的列表,可以用更简洁的加法语法实现和extend完全一致的效果:
objs = [] # 每次拿到新的内容列表后,直接用+=拼接 objs += results['Contents'] objs += l_objs['Contents']
方案3:批量拉平写法
如果你提前已经收集了所有带Contents键的结果字典(比如存放在result_pool = [results, l_objs, ...]这类集合里),可以用列表推导一次性把所有内容拉平成单层列表:
objs = [content_item for result_item in result_pool for content_item in result_item['Contents']]
易混淆点对比
用简单数字举例直观区分两个方法的差异:
- 执行
objs = []; objs.append([1,2,3]),最终objs为[[1,2,3]],长度为1 - 执行
objs = []; objs.extend([1,2,3]),最终objs为[1,2,3],长度为3
内容的提问来源于stack exchange,提问作者nimgwfc
相关产品推荐
相关产品推荐

