如何用列表推导式按id过滤提取嵌套字典的price字段值
按ID过滤提取嵌套字典中的Price值
针对你遇到的price字段既可能是单个字典也可能是字典列表的情况,可以通过统一格式后再过滤提取,以下是几种实用实现方式:
方式一:循环遍历(可读性优先)
先将price字段统一转为列表格式,再筛选出id匹配的元素对应的price数据:
# 定义目标ID target_id = "953" # 获取sub_main下的元素集合 sub_main_items = Data["main"]["sub_main"] result = [] for item in sub_main_items: # 匹配目标ID if item.get("id") == target_id: price_data = item.get("price", []) # 单个字典转成列表,统一处理逻辑 if isinstance(price_data, dict): price_data = [price_data] result.extend(price_data)
方式二:列表推导式(简洁高效)
用嵌套列表推导式一步完成筛选和格式统一:
target_id = "953" sub_main_items = Data["main"]["sub_main"] result = [ price for item in sub_main_items if item.get("id") == target_id for price in (item["price"] if isinstance(item["price"], list) else [item["price"]]) ]
仅提取第一个匹配元素的Price
如果只需要第一个符合ID条件的元素对应的price,可用next()函数快速获取:
target_id = "953" sub_main_items = Data["main"]["sub_main"] # 找到第一个匹配ID的元素,无匹配时返回None matched_item = next((item for item in sub_main_items if item.get("id") == target_id), None) result = [] if matched_item: price_data = matched_item["price"] result = price_data if isinstance(price_data, list) else [price_data]
内容的提问来源于stack exchange,提问作者Zembla
相关产品推荐
相关产品推荐

