如何高效比较JSONL文件中的字典列表与目标字符串列表?
高效筛选JSONL文件中符合条件的字典
原代码运行慢的核心问题在于列表的成员检查效率极低:list_of_strings是包含10万个元素的列表,每次执行obj[key] in list_of_strings都要遍历整个列表(时间复杂度O(10万)),100万次循环下来总操作量达到1e11级,这必然导致速度卡顿。
核心优化方案:把列表转成集合
集合(set)基于哈希表实现,成员检查的时间复杂度是O(1),只需要一次O(10万)的转换操作,后续每次检查都是常数时间,总操作量直接降到1e6+1e5,性能会有数量级的提升。
优化后的完整代码
matching_dicts = [] key = "field_1" # 注意:原代码中key带空格,确认是否为目标字段名,若为笔误请修正 # 将字符串列表转换为集合,仅需一次转换 string_set = set(list_of_strings) with jsonlines.open(file_path) as reader: for line_number, obj in enumerate(reader): # 用get方法减少一次字典键查找操作 value = obj.get(key) if value is not None and value in string_set: matching_dicts.append((obj, line_number))
额外小优化说明
- 用
obj.get(key)替代key in obj and obj[key]:减少一次字典的键查找操作,虽然单步差异小,但100万次循环累积下来也能节省一点时间。 - 确认key的正确性:原代码中key是
"field_1 "(带末尾空格),如果这是输入错误,修正后能避免漏判符合条件的字典。
内容的提问来源于stack exchange,提问作者Abijah
相关产品推荐
相关产品推荐

