Python-Json-forloop

2024-10-04 05:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将具有一种结构的JSON数据转换为另一种结构,以便生成NvD3图表。在过去的几天里,我一直要求和阅读这样做,我实现了部分解决方案。除非我在“data\ujson”字典中再添加一个键/值,否则它将正常工作。你知道吗

最奇怪的是,尽管引用“datos\u TEU”的行被注释了,但它一直给字典条目赋值,而且不知道为什么。即使我只是取消对第一个循环的注释,它最终也会得到与另一个键相同的数据。因此,我最终在两个不同的键中插入了相同数据的两个副本。除此之外,我不断重复数据或在循环中进行“重叠”。你知道吗

当然我犯了个大错误,但我看不出来。整个上午和下午,我都在把所有的东西打印到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)

我在哪里将数据分配给另一个键?你知道吗


Tags: 数据injsonfordatalistappendtot
1条回答
网友
1楼 · 发布于 2024-10-04 05:23:33

如果将tarifas_dicc赋给datos_TOTdatos_TEU,两个dict都会得到对相同事物的引用。因此,当您修改一个时,另一个将看到更改。你知道吗

首先要确保创建两个单独的dict。您还可以简化这部分代码:

for i,tarifa in enumerate(tarifas):
    data_json['datos_TOT'].append({'tarifa':tarifa, 'data': []}
    data_json['datos_TEU'].append({'tarifa':tarifa, 'data': []}

另外请注意,后面的periodo_dicc也是如此。你知道吗

相关问题 更多 >