在python中循环和创建JSON文件的函数不起作用

时间:2015-05-23 08:02:39

标签: python json excel python-2.7

我已经解析了一个excel文件,并且拥有一个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 country'以及' escel year&#39 ;)但是一个优秀的产品'。 你能帮我解决原因吗?

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},
   .............

错误在哪里? 谢谢!

1 个答案:

答案 0 :(得分: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