You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:24:21