Ключ Python Dictionary отличается, но значения одинаковы - PullRequest
0 голосов
/ 30 мая 2018

У меня проблема со словарем Python.Мой код выглядит так:

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 = {}
temp = {}

while(cline<rownum):
    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"])

В конце значения key и ARRAY[key]["CELLNAME"] должны быть одинаковыми, но они не совпадают.

Результат Python дает, как показано ниже:

C:\Python36\python.exe C:/PROJELER/PYTHON/KPI/deneme_aa.py

LK738825O415479872  LY140715O147613031

LK730215O415479771  LY140715O147613031

LB587325O815408912  LY140715O147613031

LK706735O545513813  LY140715O147613031

L0587425O545492412  LY140715O147613031

LM362625O415488912  LY140715O147613031

LK797135O415481913  LY140715O147613031

LK950525O415486512  LY140715O147613031

Знаете, как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Если вы написали:

while cline < rownum :
    tmp = source_ws.cell_value(cline+1,3)
    ARRAY[tmp] = {"CELLNAME":tmp}
    cline += 1

ARRAY был бы словарем, что-то вроде:

{"QWERTY":{"CELLNAME":"QWERTY"},
 "ASDFGH":{"CELLNAME":"ASDFGH"},
 "ZXCVBN":{"CELLNAME":"ZXCVBN"},
 ...,
 }

Но так как вы назначаете temp, он перезаписывает каждую строку с последним значением...

#temp is:  {"CELLNAME":"LASTVAL"} 

{"QWERTY":temp,
 "ASDFGH":temp,
 "ZXCVBN":temp,
 ...,
 }

Следовательно, все значения идентичны (в этом примере будет напечатано LASTVAL).

0 голосов
/ 30 мая 2018

Вы назначаете изменяемый словарь с именем temp на ARRAY[key], поэтому полученное вами значение является последним состоянием temp.Чтобы это исправить:

while(cline<rownum):
    temp["CELLNAME"]=source_ws.cell_value(cline+1,3)
    temp["SITENAME"] = source_ws.cell_value(cline + 1, 4)
    temp["LAC"] = source_ws.cell_value(cline + 1, 5)
    temp["CELLID"] = source_ws.cell_value(cline + 1, 6) 
    ARRAY[cell_name] = dict(temp)  # Makes a new copy of `temp`
    cline=cline+1
...