Python嵌套for循环向字典追加键值不覆盖旧条目问题排查
问题修复方案
故障原因
it.chain()返回的是一次性迭代器,你定义的ROIs在第一次遍历完Subject1的所有ROI后就已经耗尽为空。外层循环进入Subject2时,内层for ROI in ROIs拿不到任何元素,对应计算和写入字典的逻辑完全不会执行,最终字典里只会保留Subject1的结果。
修复方法
将ROIs转为支持重复遍历的列表即可,其余逻辑无需修改。
修正后完整代码:
import numpy as np import scipy as sp import itertools as it from scipy import stats Ideal_frequency = np.loadtxt("/volumes/... .1D") # 迭代器转列表,支持多次循环遍历 ROIs = list(it.chain(range(1,181), range(1001,1181))) # ROIs 1-180 and 1001-1180 Subjects = ["Subject1", "Subject2"] PLE_dict = {} for Subject in Subjects: for ROI in ROIs: Data = np.loadtxt(f"/volumes/seagate/{Subject}/G360_{ROI}_{Subject}.1D") PLE = sp.stats.linregress(np.log(Ideal_frequency), np.log(Data)) if ROI not in PLE_dict: PLE_dict[ROI] = [PLE[0]] else: PLE_dict[ROI].append(PLE[0]) print(PLE_dict)
预期结果
运行后每个ROI对应的列表长度为2,依次存储Subject1、Subject2的PLE[0]计算结果,输出格式示例:
{1: [-0.9924575013746104, -0.9812345xxxx], 2: [-0.8905778114042852, -0.9023456xxxx], 3: [-1.0143346946069933, -1.0076543xxxx], ... }
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

