Python字典键与对应CELLNAME值不一致问题求助
解决Python字典赋值后所有键对应同一值的问题
我来帮你捋清楚这个问题的根源——你遇到的情况是因为字典是可变对象,你全程一直在重复使用同一个temp字典实例,导致最后ARRAY里的所有键都指向了同一个字典对象,自然输出的都是最后一次赋值的内容。
先看你代码里的核心问题片段:
ARRAY = {} temp = {} while(cline<rownum): temp["CELLNAME"]=source_ws.cell_value(cline+1,3) key = temp["CELLNAME"] ARRAY[key]=temp cline=cline+1
每次循环你只是修改了temp字典里的CELLNAME值,但ARRAY中每个键存储的都是同一个temp字典的引用。当循环走到最后一次时,temp里的值被更新成了最后一行的CELLNAME,所以所有键对应的都是这个最终值。
解决方法:每次循环创建新的字典实例
只需要把temp = {}移到循环内部,这样每次循环都会生成一个全新的字典,每个键都会指向独立的字典对象:
import os import xlrd working_dir = os.getcwd() source_wb = xlrd.open_workbook(working_dir+'/4G_CA_Traffic.xlsx') source_ws = source_wb.sheet_by_name('Subreport 1') rownum=(source_ws.nrows-1) colnum=(source_ws.ncols-1) cline=0 act_cline=0 ARRAY = {} while(cline<rownum): # 每次循环新建一个temp字典,避免引用复用 temp = {} temp["CELLNAME"]=source_ws.cell_value(cline+1,3) key = temp["CELLNAME"] ARRAY[key]=temp cline=cline+1 for key in ARRAY.keys(): print(key+"\t"+ARRAY[key]["CELLNAME"])
或者你可以更简洁地写,直接省去temp变量,在赋值时创建新字典:
while(cline<rownum): cell_name = source_ws.cell_value(cline+1,3) ARRAY[cell_name] = {"CELLNAME": cell_name} cline=cline+1
这样修改后,每个键对应的都是独立的字典实例,输出的key和ARRAY[key]["CELLNAME"]就会完全一致了。
内容的提问来源于stack exchange,提问作者sonerss
相关产品推荐
相关产品推荐

