2015-05-23 54 views
0

我有一個解析好的excel文件,並且具有JSON風格的數據庫,如下所示。在python中循環並創建JSON文件的函數不起作用

excel=[{'country': u'CH', 'product': u'MDF','scenario': u'BAU','year': 2010}, 
{'country': u'CH', 'product': u'OSB', 'scenario': u'BAU','year': 2010}, 
{'country': u'CH','product': u'MDF','scenario': u'BAU', 'year': 2011}, 
{'country': u'CH', 'product': u'OSB', 'scenario': u'BAU','year': 2011}, 
{'country': u'IT', 'product': u'MDF','scenario': u'BAU','year': 2010}, 
{'country': u'IT', 'product': u'OSB', 'scenario': u'BAU','year': 2010}, 
{'country': u'IT','product': u'MDF','scenario': u'BAU', 'year': 2011}, 
{'country': u'IT', 'product': u'OSB', 'scenario': u'BAU','year': 2011}] 

my_JSON={ 
    ('PEM_FORMIT', u'medium density fibreboard, at plant'): { 
     'PEM_code': 'MDF', 
     u'code': 245}, 
    ('PEM_FORMIT', u'oriented strand board, at plant'): { 
     'PEM_code': 'OSB', 
     u'code': 245}} 

基本上我想創建另一個JSON,每當在Excel的「產品」是一樣的「PEM代碼」創建另一個JSON,添加一個名字,然後複製「my_json」相對的對象,並添加等領域,就像下面的'excel year'和'excel country'一樣。 在這個例子中應該創建一個8而不是2對象的JSON。

我寫的函數創建了8個具有正確名稱的JSON對象,但它混淆了所有其他額外的字段添加(即在這種情況下'excel國家'和'年份'),但一個'excel產品' 。 你能幫我理解爲什麼嗎?

def myfunc(excel,my_JSON): 
    empty_dict={} 
    for rows in excel: 
     if rows['scenario']=='BAU': 
      for key,values in my_JSON.iteritems(): 
       if rows['product']==values['PEM_code']: 
        name_db="FORMIT_PEM_{}".format(rows['scenario']),"{} {} {}".format(rows['country'],rows['year'],rows['product']) 
        if name_db not in empty_dict: 
         empty_dict[name_db]=values 
         empty_dict[name_db]['excel product']=rows['product'], 
         empty_dict[name_db]['excel year']=rows['year'] 
         empty_dict[name_db]['excel country']=rows['country'] 



    return empty_dict 

返回這是錯誤

{('FORMIT_PEM_BAU', 'CH 2010 MDF'): {'PEM_code': 'MDF', 
    u'code': 245, 
    'excel country': u'IT', # should be CH 
    'excel product': (u'MDF',), 
    'excel year': 2011},  #should be 2010 
('FORMIT_PEM_BAU', 'CH 2010 OSB'): {'PEM_code': 'OSB', 
    u'code': 245, 
    'excel country': u'IT', # should be CH 
    'excel product': (u'OSB',), 
    'excel year': 2011},  # should be 2010 
('FORMIT_PEM_BAU', 'CH 2011 MDF'): {'PEM_code': 'MDF', 
    u'code': 245, 
    'excel country': u'IT', # should be CH 
    'excel product': (u'MDF',), 
    'excel year': 2011}, 
('FORMIT_PEM_BAU', 'CH 2011 OSB'): {'PEM_code': 'OSB', 
    u'code': 245, 
    'excel country': u'IT', # should be CH 
    'excel product': (u'OSB',), 
    'excel year': 2011}, 
    ............. 

哪裏錯誤? 謝謝!

+0

嗨,大家好,很抱歉,我在這裏張貼的新手,沒有太多的寫'好'帖子的經驗。你能告訴我什麼是錯誤的,我應該改進以避免將來出現同樣的問題? Thanks ahead –

回答

0

您更改了my_json結構的字典,因此您以後更改了empty_dict的內容。相反,你應該複製一份:

def myfunc(excel,my_JSON): 
    empty_dict={} 
    for rows in excel: 
     if rows['scenario']=='BAU': 
      for key,values in my_JSON.iteritems(): 
       if rows['product']==values['PEM_code']: 
        name_db="FORMIT_PEM_{}".format(rows['scenario']),"{} {} {}".format(rows['country'],rows['year'],rows['product']) 
        if name_db not in empty_dict: 
         empty_dict[name_db] = dict(values) # copy 
         empty_dict[name_db]['excel product']=rows['product'], 
         empty_dict[name_db]['excel year']=rows['year'] 
         empty_dict[name_db]['excel country']=rows['country'] 



    return empty_dict 
+0

感謝丹尼爾它的工作原理! –

+0

@GiuseppeCardellini:然後將其標記爲已接受的答案。 – Daniel