如何通过双层for循环创建包含完整结果的嵌套字典?
生成包含所有参数组合得分的嵌套字典
问题原因
你的代码中,每次执行thisdict1.update({i1:{b1:m2}})时,都会将i1对应的整个字典替换为仅包含当前b1的新字典,导致每个i1最终只保留最后一次循环的b1得分。
修正方案
需要为每个i1维护一个独立的子字典,在循环中不断向子字典添加b1与对应得分的键值对,而非覆盖整个子字典。
方案一:提前初始化子字典
thisdict1 = {} for i1 in range(1, 5): # 为当前min_samples值初始化空的子字典 thisdict1[i1] = {} for b1 in range(1, 6): ransac2 = RANSACRegressor(base_estimator=LinearRegression(), min_samples=i1, max_trials=b1) ransac2.fit(X_test, y_test) m2 = ransac2.score(X_test, y_test) # 向子字典中添加max_trials对应的得分 thisdict1[i1][b1] = m2 print(thisdict1)
方案二:使用setdefault自动初始化子字典
如果不想提前初始化子字典,可以用dict.setdefault()方法,自动处理i1不存在的情况:
thisdict1 = {} for i1 in range(1, 5): for b1 in range(1, 6): ransac2 = RANSACRegressor(base_estimator=LinearRegression(), min_samples=i1, max_trials=b1) ransac2.fit(X_test, y_test) m2 = ransac2.score(X_test, y_test) # 确保i1对应的子字典存在,再添加键值对 thisdict1.setdefault(i1, {})[b1] = m2 print(thisdict1)
输出效果
修正后会生成包含所有min_samples(1-4)与max_trials(1-5)组合得分的嵌套字典,格式与你期望的示例一致。
内容的提问来源于stack exchange,提问作者Stefan Raychev
相关产品推荐
相关产品推荐

