Python如何按条件删除嵌套字典中object-name含apple的子字典?
问题原因
你遇到的两个问题根源:
- 直接遍历列表同时删除元素时,列表长度会动态变化,后续元素的索引会前移,导致部分符合条件的元素被跳过漏删
item.clear()只是清空字典对象的内容,并不会把这个元素从所属的seq_key列表里移除
正确实现代码
import json with open(r"my_file.json", encoding='utf-8') as f: abc = json.load(f) # 遍历item数组里的每一个元素 for item in abc['item']: # 直接用列表推导式生成过滤后的新seq_key,替换原列表 item['seq_key'] = [ entry for entry in item['seq_key'] if not entry['object-name'].startswith('apple:') ] # 如果需要将处理后的结果写回文件,可添加下面代码 with open(r"processed_file.json", 'w', encoding='utf-8') as f: json.dump(abc, f, indent=4, ensure_ascii=False)
代码说明
- 用列表推导式直接过滤掉
object-name前缀为apple:的条目,生成新的列表直接替换原seq_key,完全避开了遍历删元素的索引错位问题 - 用
startswith('apple:')判断前缀比split(':')[0]更高效,也避免了部分没有:的字符串导致的索引错误问题
内容的提问来源于stack exchange,提问作者jones
相关产品推荐
相关产品推荐

