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

Python中如何通过for循环将person字典的完整值存入all字典?

问题原因与解决方法

问题根源

你遇到的问题是因为可变对象的引用特性:循环中复用了同一个person字典和N列表,每次循环结束调用clear()时,会把已经存入all字典里的对象也清空——因为all[j] = person存的是字典的引用,不是独立的副本,修改原对象会同步影响all里的内容。

解决方法一:每次循环创建新对象(推荐)

直接在循环内部新建person字典和N列表,避免复用同一个对象:

from random import *
from PIL import Image
import numpy as np
import FCM as FCM
from collections import defaultdict

ii = Image.open("dataset/image11.jpg").convert("L")
data = list(ii.getdata())

all = {}

for j in range(8):
    N = []  # 每次循环新建空列表
    for i in range(4):
        N.append(randint(min(data), max(data)))
    
    person = {}  # 每次循环新建空字典
    person['cluster'] = N
    person['obj'] = FCM.objfunc(FCM.rlistes(data, person['cluster']), person['cluster'])
    all[j] = person

print(all)

解决方法二:存入字典时保存副本

如果一定要复用外部定义的person和N,可以在存入all时创建对象的副本,避免后续修改影响已存入的内容:

from random import *
from PIL import Image
import numpy as np
import FCM as FCM
from collections import defaultdict

ii = Image.open("dataset/image11.jpg").convert("L")
data = list(ii.getdata())

person = {}
N = []
all = {}

for j in range(8):
    N.clear()
    for i in range(4):
        N.append(randint(min(data), max(data)))
    
    person['cluster'] = N.copy()  # 保存列表的副本
    person['obj'] = FCM.objfunc(FCM.rlistes(data, person['cluster']), person['cluster'])
    all[j] = person.copy()  # 保存字典的副本
    person.clear()

print(all)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:12:14