如何在包含花括号结构的列表中搜索指定ID字段值
结构说明
你当前处理的是Python中的字典列表结构:外层方括号包裹的是列表,列表内每个花括号包裹的元素是存储键值对的字典,要查找指定ID对应的条目,直接遍历列表匹配每个字典内的id字段即可。
常用实现方法
- 查找第一个匹配目标ID的条目
假设你要查找的目标ID为MjEyYTIxNDhjZjM5ZTQ4IDU3ODQ4NzUgMWRhMzI2ZmRlZjdkYzM2,可直接通过循环遍历实现:
# 原始数据赋值 location_list = [{'address': '9 Lee Road, Wirral, Merseyside', 'url': '/get/ODQ2MjhhNTg1Y2E1YzE2IDE3MDkxMzc2IDFkYTMyNmZkZWY3ZGMzNg==', 'id': 'ODQ2MjhhNTg1Y2E1YzE2IDE3MDkxMzc2IDFkYTMyNmZkZWY3ZGMzNg=='}, {'address': '9 Lee Road, Aylesbury, Buckinghamshire', 'url': '/get/MTEwZDgzMGUxMDBlMWQyIDIyMDI5NjA1IDFkYTMyNmZkZWY3ZGMzNg==', 'id': 'MTEwZDgzMGUxMDBlMWQyIDIyMDI5NjA1IDFkYTMyNmZkZWY3ZGMzNg=='}, {'address': '9 Lee Road, London', 'url': '/get/MjEyYTIxNDhjZjM5ZTQ4IDU3ODQ4NzUgMWRhMzI2ZmRlZjdkYzM2', 'id': 'MjEyYTIxNDhjZjM5ZTQ4IDU3ODQ4NzUgMWRhMzI2ZmRlZjdkYzM2'}, {'address': '9 Lee Road, Manchester', 'url': '/get/MmNkNDQzN2I2ODc3NmVhIDMwMTUwOTg3IDFkYTMyNmZkZWY3ZGMzNg==', 'id': 'MmNkNDQzN2I2ODc3NmVhIDMwMTUwOTg3IDFkYTMyNmZkZWY3ZGMzNg=='}, {'address': '9 Lee Road, Aldeburgh, Suffolk', 'url': '/get/N2YzZGJiMTQ5OGRlYjg3IDIyOTczNDM5IDFkYTMyNmZkZWY3ZGMzNg==', 'id': 'N2YzZGJiMTQ5OGRlYjg3IDIyOTczNDM5IDFkYTMyNmZkZWY3ZGMzNg=='}, {'address': '9 Lee Road, Chesterfield, Derbyshire', 'url': '/get/MWI5MGFhNDY5MjcwNDUwIDcxMjg0MjggMWRhMzI2ZmRlZjdkYzM2', 'id': 'MWI5MGFhNDY5MjcwNDUwIDcxMjg0MjggMWRhMzI2ZmRlZjdkYzM2'}] target_id = "MjEyYTIxNDhjZjM5ZTQ4IDU3ODQ4NzUgMWRhMzI2ZmRlZjdkYzM2" result = None for item in location_list: if item["id"] == target_id: result = item break print(result) # 输出:{'address': '9 Lee Road, London', 'url': '/get/MjEyYTIxNDhjZjM5ZTQ4IDU3ODQ4NzUgMWRhMzI2ZmRlZjdkYzM2', 'id': 'MjEyYTIxNDhjZjM5ZTQ4IDU3ODQ4NzUgMWRhMzI2ZmRlZjdkYzM2'}
遍历完成后如果result仍为None,说明列表中没有对应ID的条目,可根据业务需求做后续处理。
如果追求代码简洁,也可以用生成器表达式实现同样的逻辑:
# 第二个参数None为找不到匹配项时的默认返回值,避免抛出StopIteration异常 result = next((item for item in location_list if item["id"] == target_id), None)
- 查找所有匹配目标ID的条目
如果列表中可能存在多个同ID的条目,用列表推导式即可取出全部匹配结果:
target_id = "ODQ2MjhhNTg1Y2E1YzE2IDE3MDkxMzc2IDFkYTMyNmZkZWY3ZGMzNg==" all_matched = [item for item in location_list if item["id"] == target_id]
注意事项
- 访问字典字段时使用
item["字段名"]格式,字段名需要和数据中的键完全匹配,拼写、大小写错误都会触发KeyError。 - 如果你不确定某条字典里是否存在
id键,可以用item.get("id")取值,键不存在时会默认返回None,不会直接抛出错误中断程序。 - 如果需要频繁执行ID查找操作,建议先把原始列表转换为以ID为键的字典,后续查找的时间复杂度可以从O(n)降到O(1),数据量大时性能提升非常明显,转换代码如下:
id_map = {item["id"]: item for item in location_list} # 后续查找直接按键取值即可 result = id_map.get(target_id)
内容的提问来源于stack exchange,提问作者Chad Yilmaz
相关产品推荐
相关产品推荐

