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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:15:12