如何利用索引查找JSON记录位置?有无替代for循环的更优方法
替代for循环查找JSON记录索引的几种方法
下面几种方法可以替代你当前的手动计数for循环,让代码更简洁高效:
1. 用enumerate简化循环逻辑
不用手动维护rec_no变量,enumerate会直接返回每个元素的索引和对应值,代码更直观:
seek = 152211304 for rec_no, record in enumerate(json_data['responses']): if record['id'] == seek: break extract = json_data['responses'][rec_no]['body'] print(extract)
2. 生成器表达式快速定位索引
用一行代码就能找到目标索引,还能处理找不到记录的情况:
seek = 152211304 try: rec_no = next(i for i, item in enumerate(json_data['responses']) if item['id'] == seek) extract = json_data['responses'][rec_no]['body'] print(extract) except StopIteration: print("未找到对应ID的记录")
3. 转换为字典(适合频繁查找场景)
如果需要多次根据id查询记录,把列表转成以id为键的字典是最优解——后续查找耗时几乎为O(1),比循环高效得多:
# 先构建ID到记录的映射字典 response_dict = {item['id']: item for item in json_data['responses']} # 直接通过ID获取内容 seek = 152211304 if seek in response_dict: extract = response_dict[seek]['body'] print(extract) else: print("未找到对应ID的记录")
适用场景说明
- 单次查找:用前两种方法足够,代码简洁;
- 多次/大量数据查找:优先用字典映射,性能优势明显。
内容的提问来源于stack exchange,提问作者Peter Hill
相关产品推荐
相关产品推荐

