by jsklearner
@TOC
简介
问题很小,但是调了很长时间bug。 主要是字典嵌套字典的时候,第二层字典必须每次循环都要重新定义一下,否则会出现每一次循环会使用当前的字典值覆盖之前所有的第二层字典值。主要可能是因为定义的是一个字典地址,每一次访问都是访问的地址,所以造成地址上的赋值同步更新。
问题描述
sum_gray_dict是我定义的第一层字典,gray_dict是我定义的第二层字典。
gray_dict = {}
sum_gray_dict = {}
# 获取imgL中的多个图像相对应defect和normal区域的灰度值
for point_area_coor_index, point_area_coor in enumerate(points_area_coor): # 对多个区域进行遍历
#print(points_label[point_area_coor_index])
for index, img_name in enumerate(imgL): # 遍历图像列表
#print(img_name)
for locViewAn in locationViewAngle: # 遍历已知的位置列表
if locViewAn.split('_')[0] in img_name and locViewAn.split('_')[1] in img_name:
#print("locViewAn", locViewAn, len(point_area_coor))
gray_dict[locViewAn] = GetPixelValueAccoCoor(test_path=test_path, img_name=img_name, coordinate=point_area_coor)
sum_gray_dict[points_label[point_area_coor_index]] = gray_dict
for i in range(point_area_coor_index+1):
print(i, len(sum_gray_dict[points_label[i]]['High_Down']))
运行程序:
输出的是当前循环之前更新的后的值,可见出现了覆盖异常情况。
问题解决
将gray_dict = {} 放在第一层循环中,就可以解决,实在是没有意识到这个问题。
sum_gray_dict = {}
# 获取imgL中的多个图像相对应defect和normal区域的灰度值
for point_area_coor_index, point_area_coor in enumerate(points_area_coor): # 对多个区域进行遍历
#print(points_label[point_area_coor_index])
gray_dict = {}
for index, img_name in enumerate(imgL): # 遍历图像列表
#print(img_name)
for locViewAn in locationViewAngle: # 遍历已知的位置列表
if locViewAn.split('_')[0] in img_name and locViewAn.split('_')[1] in img_name:
#print("locViewAn", locViewAn, len(point_area_coor))
gray_dict[locViewAn] = GetPixelValueAccoCoor(test_path=test_path, img_name=img_name, coordinate=point_area_coor)
sum_gray_dict[points_label[point_area_coor_index]] = gray_dict
for i in range(point_area_coor_index+1):
print(i, len(sum_gray_dict[points_label[i]]['High_Down']))
输出结果:
可见输出结果已经不会出现赋值异常问题。
2019.11.07. 希望能帮到大家。