簡體   English   中英

Python Json for循環

[英]Python Json for-loop

我需要將一種結構的JSON數據轉換為另一種結構,以用於生成NvD3圖表。 在過去的幾天里,我一直在要求和閱讀以完成此操作,並獲得了部分解決方案。 除非我在“ data_json”字典中再添加一個鍵/值,否則它將起作用。

最奇怪的是,盡管引用“ datos_TEU”的行被注釋了,但它一直為該字典條目分配值,卻不知道為什么。 即使我只是取消注釋第一個循環,它最終也會得到與另一個鍵相同的數據。 因此,我最終在2個不同的鍵中插入了2個相同數據的副本。 除此之外,我一直在循環中重復數據或進行“重疊”。

當然,我犯了一個很大的noob錯誤,但我看不到它。 我一直在將所有內容打印到外殼上,整個上午和下午都在嘗試各種不同的操作,但是我無法捕捉到該錯誤。

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也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM