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

Python遍历JSON生成列表时结果重复25次的问题排查

问题根因

你的代码有3个核心逻辑错误:

  • 字典d定义在循环外部,属于全局复用的可变对象。Python中列表存储的是对象的引用而非拷贝,你每次循环往列表追加的都是同一个字典的内存地址,后续循环给d新增键值对时,列表里之前追加的所有元素都会同步更新,最终所有元素都会变成包含全部25组键值对的字典。
  • 追加列表的逻辑放错了位置。你在每次循环里都执行一次sizelist.append(d),循环25次自然会往列表里塞25个元素,和你「最终列表仅包含1个完整映射字典」的需求完全不符。
  • 遍历写法冗余且存在变量覆盖问题:你提前计算了jsonLength存数组长度,结果写for循环时直接把jsonLength当成循环变量用,覆盖了原有的长度值;同时额外维护forCounter手动做数组索引,完全没必要,还增加了出错概率。
修正代码

调整逻辑:循环内只负责给字典填充尺码和skuId的映射关系,等所有键值对填充完成后,再把完整的字典一次性追加到列表中即可,同时简化遍历逻辑去掉多余的计数器:

import json

sizeCounter = 3.5
json_object = json.loads(json1)

# 初始化尺码-skuId映射字典
size_sku_map = {}
# 直接遍历数组元素,不需要手动维护索引计数器
for sku_info in json_object["skuAvailability"]:
    size_sku_map[sizeCounter] = sku_info["skuId"]
    sizeCounter += 0.5

# 所有映射组装完成后,再放入列表,仅追加1次
sizelist = [size_sku_map]
print(sizelist)

补充说明:如果后续有需求需要在循环过程中保存每次迭代的字典快照,需要追加字典的浅拷贝,即写sizelist.append(d.copy()),否则还是会出现所有元素同步变化的问题。

内容的提问来源于stack exchange,提问作者BigO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:48:19