Python如何从列表的列表中提取指定开头子列表的两个值?
解决方案
核心思路是遍历子列表,通过第一个元素的唯一值定位目标项——因为子列表顺序动态变化,索引定位不可靠,只能依赖第一个元素的匹配关系。
代码实现步骤
- 从接口获取JSON数据,提取目标列表
vsRTop - 取出要匹配的目标值(注意别用
id当变量名,这是Python内置函数,容易冲突) - 遍历
vsRTop,找到第一个元素匹配目标值的子列表 - 提取该子列表的第二个(索引1)和第三个(索引2)元素
完整代码示例
import json # 模拟接口返回的JSON数据(实际场景替换成接口请求逻辑) json_data = { "top": [[266, 5300, 2696, 50.88], [36, 5191, 2938, 53.16], [875, 5133, 2553, 51.29]] } # 你的id字典 id_dict = {"id1": 875} vsRTop = json_data['top'] target_id = id_dict['id1'] # 遍历查找目标子列表 second_elem = None third_elem = None for sub_list in vsRTop: # 确保子列表非空且第一个元素匹配 if sub_list and sub_list[0] == target_id: second_elem = sub_list[1] third_elem = sub_list[2] break # 找到后直接退出循环,提升效率 if second_elem is not None and third_elem is not None: print(f"提取结果:第二个元素={second_elem}, 第三个元素={third_elem}") else: print(f"未找到以{target_id}开头的子列表")
优化方案(适合频繁查询场景)
如果需要多次查询不同的id值,建议提前把列表转换成字典映射,后续查询直接通过键获取,时间复杂度从O(n)降到O(1):
# 提前构建映射字典,以子列表第一个元素为键 top_map = {sub[0]: sub for sub in vsRTop if sub} # 直接通过目标id查询 if target_id in top_map: sub_list = top_map[target_id] second_elem = sub_list[1] third_elem = sub_list[2] print(f"提取结果:第二个元素={second_elem}, 第三个元素={third_elem}") else: print(f"未找到以{target_id}开头的子列表")
内容的提问来源于stack exchange,提问作者T K
相关产品推荐
相关产品推荐

