如何不遍历Python字典列表查找指定assetId对应的元素或索引
问题解答
Python 原生列表没有内置items.find(116040828)这类直接匹配字典内部键值的方法,但可以通过以下两种简化写法实现需求,无需手动编写完整的遍历判断for循环:
- 方案1:单次查找用
next()+生成器表达式
查找对应元素:
查找对应索引:# 找到返回对应字典,找不到返回None target_item = next((item for item in items if item['assetId'] == 116040828), None)# 找到返回对应下标,找不到返回-1 target_index = next((idx for idx, item in enumerate(items) if item['assetId'] == 116040828), -1) - 方案2:频繁查找优先预构建索引映射
如果你需要多次根据assetId查询,建议提前把列表转成以assetId为键的映射字典,后续查询效率为O(1),无需每次遍历:# 构建元素映射表 asset_item_map = {item['assetId']: item for item in items} # 直接查询 target_item = asset_item_map.get(116040828) # 如果需要查询索引,构建索引映射表 asset_index_map = {item['assetId']: idx for idx, item in enumerate(items)} target_index = asset_index_map.get(116040828, -1)
注意:上述两种方案底层逻辑依然会遍历列表,只是语法做了封装不需要你手动写判断逻辑。单次查询用方案1更简洁,多次查询优先用方案2性能更高。
内容的提问来源于stack exchange,提问作者gianni
相关产品推荐
相关产品推荐

