Python Json for 循环

Python Json for-loop

我需要将具有一种结构的 JSON 数据转换为另一种结构,我可以用它来生成 NvD3 图表。在过去的几天里,我一直在询问和阅读如何做到这一点,并且我获得了部分解决方案。除非我在 "data_json" 字典中再添加一个 key/value,否则它将起作用。

最奇怪的是,尽管引用 "datos_TEU" 的行被注释了,它仍然为该字典条目分配值并且不知道为什么。即使我只是取消注释第一个循环,它也会以与另一个键相同的数据结束。所以我最终得到了插入 2 个不同键的相同数据的 2 个副本。除此之外,我一直在循环中重复数据或制作 "overlaps"。

我肯定犯了一个大的菜鸟错误,但我看不到。我一直在将所有内容打印到 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)

我在哪里将数据分配给另一个键?

如果您将 tarifas_dicc 分配给 datos_TOTdatos_TEU,两个字典都会引用 相同的 事物。所以当你修改一个时,另一个会看到变化。

只需确保创建两个单独的字典作为开始。您也可以简化这部分代码:

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

另请注意,稍后 periodo_dicc 也是如此。