Python字典update覆盖而非追加,多页商品合并异常问题
问题分析与解决方案
哦,我一眼就发现问题所在了——你用字典的update()方法来合并数据,但这完全不是你想要的行为!
为什么会只保留最后一页数据?
每个getProducts()返回的products字典里,都包含一个'products'键,对应当前页的商品列表。当你调用allproducts.update(products)时,字典的update()方法会直接用新字典里的'products'值替换掉allproducts中已有的'products'值,而不是把新列表的元素追加进去。这就导致每循环一次,之前的商品数据都被覆盖了,最后自然只留下最后一页的158条数据。
而你循环里打印p['id']能看到全部658个ID,是因为每一页的数据你都成功获取到了,只是没把它们正确合并到总字典里而已。
修正后的代码
我们需要把每一页的商品列表追加到总列表中,而不是替换。首先调整初始化逻辑,然后用列表的extend()方法来合并数据:
import math itemcount = getProductCount() # 658 print(f"total products: {itemcount}") pages = math.ceil(itemcount / 250) # 3 page = 1 print(f"pages: {pages}") # 初始化空的商品列表,而不是带空字典的列表 allproducts = {'products': []} while page <= pages: print(f"page: {page}") products = getProducts(lang, page, 250) # 将当前页的商品列表追加到总列表中 allproducts['products'].extend(products['products']) page += 1 print(allproducts)
更清晰的替代实现方式
你也可以先单独收集所有商品到一个列表,最后再组装成需要的字典结构,这样逻辑更直观:
import math itemcount = getProductCount() print(f"total products: {itemcount}") pages = math.ceil(itemcount / 250) page = 1 # 先初始化一个空列表用来存所有商品 all_products = [] while page <= pages: print(f"page: {page}") response = getProducts(lang, page, 250) all_products.extend(response['products']) page += 1 # 最后组装成需要的字典格式 allproducts = {'products': all_products} print(allproducts)
额外注意点
原代码中初始化allproducts = {'products': [{}]}会导致总列表里多一个空字典元素,这也是需要修正的小细节——我们要的是空列表,不是包含空字典的列表。
内容的提问来源于stack exchange,提问作者mdgeus
相关产品推荐
相关产品推荐

