按sku与id匹配为产品字典添加价格字段问题求助
解决方案
问题根源
你用zip循环失败的核心原因是:zip是按列表索引位置一一配对,只有当products和prices中第N个元素的sku与id恰好匹配时才会成功更新。你的4000条数据里仅14条满足位置+值的双重匹配,所以只有14条生效。
正确实现方式
先把prices转换成以id为键的映射字典,通过实际值匹配而非位置匹配来关联数据,效率和准确性都会大幅提升。
代码示例
# 构建价格映射字典:用price的id作为键,对应price的value和currencyId信息 price_map = {price_item['id']: price_item['price'] for price_item in prices} # 遍历所有产品offer,匹配更新 for offer in products: offer_sku = offer.get('sku') # 如果当前offer的sku在价格映射中存在,就更新字段 if offer_sku in price_map: price_data = price_map[offer_sku] offer['value'] = price_data['value'] offer['currencyId'] = price_data['currencyId']
补充说明
- 这种方式的时间复杂度是O(M+N)(M是products长度,N是prices长度),比嵌套循环的O(M*N)高效得多,适合处理4000条量级的数据。
- 如果存在sku找不到对应price的情况,代码会自动跳过,避免报错;如果需要处理这类缺失项,可以在
if分支外添加逻辑(比如设置默认值)。
内容的提问来源于stack exchange,提问作者Iren E
相关产品推荐
相关产品推荐

