为了生成 NvD3 图表,需要将具有一个结构的 JSON 数据转换为另一个结构。尽管已在过去的几天中一直在寻求和阅读解决方案,我只能获得部分解决方案。该解决方案有效,但只要向 data_json 字典添加一个键/值对,它就会停止运行。
最奇怪的是,尽管引用 datos_TEU 的行已注释掉,但它仍然会为该字典条目分配值,并且不知道为什么。即使只取消注释第一个循环,它最终也会与另一个键具有相同的数据。所以我最终得到 2 份相同的数据,插入在 2 个不同的键中。除此之外,它还在循环中重复数据或产生“重叠”。
我肯定犯了一个很大的新手错误,但我看不到它。我已经尝试在整个早上和下午打印所有内容到 shell 并尝试不同的方法,但我无法发现错误。
data = json.load(url_obj)
tarifas = ('2.0A','2.0DHA','2.0DHSA')
fecha = '12345' #Just to develop
terminos = ('Dia','Hora','GEN','NOC','VHC','COFGEN','COFNOC','COFVHC','PMHGEN','PMHNOC','PMHVHC','SAHGEN','SAHNOC','SAHVHC','FOMGEN','FOMNOC','FOMVHC','FOSGEN','FOSNOC','FOSVHC','INTGEN','INTNOC','INTVHC','PCAPGEN','PCAPNOC','PCAPVHC','TEUGEN','TEUNOC','TEUVHC')
data_json = {
'datos_TOT':[],'datos_TEU':[],'Fecha':fecha}
for i,tarifa in enumerate(tarifas):
tarifas_dicc= {
'tarifa':tarifa}
tarifas_dicc['data'] = [] #Clean and create a new empty one.
data_json['datos_TOT'].append(tarifas_dicc)
=> #data_json['datos_TEU'].append(tarifas_dicc) I found that problems start when I uncomment this line. From here on the returned data will have duplicities or data that should´nt be there.
list_terminos = terminos[(2+i)::3] #The original data is coded in a single dictionary and I have to split it into 3 different categories.
for j in range (0,3):
periodo_dicc = {
'periodo':'{0}-{1}'.format(j,j+1)}
periodo_dicc['data'] = [] #Clean and create a new empty one.
#data_json['datos_TEU'][i]['data'].append(periodo_dicc)
data_json['datos_TOT'][i]['data'].append(periodo_dicc)
for k,termino in enumerate(list_terminos):
data_dicc_TOT = {
'value':data["PVPC"][j][termino]} #This structure come from the original data_json i´m using
data_dicc_TOT['label'] = termino
#data_dicc_TEU = {
'value':data["PVPC"][j][list_terminos[0]]}
#data_dicc_TEU['label'] = list_terminos[0]
#data_json['datos_TEU'][i]['data'][j]['data'].append(data_dicc_TEU)
data_json['datos_TOT'][i]['data'][j]['data'].append(data_dicc_TOT)
Where am I assigning the data to the other key?
2、解决方案
错误在于 data_json['datos_TOT'][i]['data'].append(periodo_dicc)
和 data_json['datos_TOT'][i]['data'][j]['data'].append(data_dicc_TOT)
。当取消注释 data_json['datos_TEU'].append(tarifas_dicc)
时,它将 tarifas_dicc
添加到 data_json['datos_TEU']
中,即使 data_json['datos_TEU'][i]['data'].append(periodo_dicc)
和 data_json['datos_TOT'][i]['data'][j]['data'].append(data_dicc_TOT)
将数据添加到 data_json['datos_TOT']
中。
要修复这个问题,需要将 data_json['datos_TEU'].append(tarifas_dicc)
取消注释,然后将 data_json['datos_TOT'][i]['data'].append(periodo_dicc)
和 data_json['datos_TOT'][i]['data'][j]['data'].append(data_dicc_TOT)
注释掉。
data = json.load(url_obj)
tarifas = ('2.0A','2.0DHA','2.0DHSA')
fecha = '12345' #Just to develop
terminos = ('Dia','Hora','GEN','NOC','VHC','COFGEN','COFNOC','COFVHC','PMHGEN','PMHNOC','PMHVHC','SAHGEN','SAHNOC','SAHVHC','FOMGEN','FOMNOC','FOMVHC','FOSGEN','FOSNOC','FOSVHC','INTGEN','INTNOC','INTVHC','PCAPGEN','PCAPNOC','PCAPVHC','TEUGEN','TEUNOC','TEUVHC')
data_json = {
'datos_TOT':[],'datos_TEU':[],'Fecha':fecha}
for i,tarifa in enumerate(tarifas):
tarifas_dicc= {
'tarifa':tarifa}
tarifas_dicc['data'] = [] #Clean and create a new empty one.
data_json['datos_TOT'].append(tarifas_dicc)
data_json['datos_TEU'].append(tarifas_dicc) # Uncomment this line.
list_terminos = terminos[(2+i)::3] #The original data is coded in a single dictionary and I have to split it into 3 different categories.
for j in range (0,3):
periodo_dicc = {
'periodo':'{0}-{1}'.format(j,j+1)}
periodo_dicc['data'] = [] #Clean and create a new empty one.
#data_json['datos_TEU'][i]['data'].append(periodo_dicc) # Comment this line.
#data_json['datos_TOT'][i]['data'].append(periodo_dicc) # Comment this line.
for k,termino in enumerate(list_terminos):
data_dicc_TOT = {
'value':data["PVPC"][j][termino]} #This structure come from the original data_json i´m using
data_dicc_TOT['label'] = termino
#data_dicc_TEU = {'value':data["PVPC"][j][list_terminos[0]]}
#data_dicc_TEU['label'] = list_terminos[0]
#data_json['datos_TEU'][i]['data'][j]['data'].append(data_dicc_TEU)
#data_json['datos_TOT'][i]['data'][j]['data'].append(data_dicc_TOT) # Comment this line.