Python如何根据输入姓名从接口返回的字典列表中查询对应id
Python人员ID查询功能实现
完整实现代码
import json import requests def get_person_id_map(): # 修复原代码URL格式错误 url = 'https://aig.com/e/id' try: response = requests.get(url, timeout=10) # requests库自带json解析方法,无需手动调用json.loads parsed_response = response.json() # 构建姓名到id的映射,同时处理同姓名对应多个id的情况 person_map = {} for item in parsed_response.get('values', []): name = item.get('name') pid = item.get('id') if name not in person_map: person_map[name] = [] person_map[name].append(pid) return person_map except Exception as e: print(f"接口数据获取失败:{e}") return {} if __name__ == "__main__": person_id_map = get_person_id_map() if not person_id_map: print("未获取到有效人员数据,程序退出") exit() print("人员ID查询工具,输入exit可退出程序") while True: input_name = input("请输入要查询的人员姓名:").strip() if input_name == 'exit': print("程序退出") break ids = person_id_map.get(input_name) if not ids: print(f"未查询到姓名为【{input_name}】的人员信息") elif len(ids) == 1: print(f"姓名【{input_name}】对应的ID为:{ids[0]}") else: print(f"姓名【{input_name}】对应多个ID:{', '.join(ids)}")
代码说明
- 修复了原代码中请求URL缺少双斜杠的格式错误,这是原代码运行报错的核心原因
- 直接使用requests库自带的
json()方法解析返回结果,比手动调用json.loads更简洁,也会自动处理编码兼容问题 - 提前将接口返回的人员数据转换为姓名-ID映射字典,即使有上百条数据,查询速度也不受影响
- 兼容同姓名对应多个ID的场景,会自动返回所有匹配的ID
- 增加了网络异常、无有效数据、查询无结果的场景处理,不会出现无意义的程序崩溃报错
- 支持循环多次查询,不需要每次运行程序都重新请求接口拉取数据
内容的提问来源于stack exchange,提问作者Kiran
相关产品推荐
相关产品推荐

