Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中循环并创建JSON文件的函数无效_Python_Json_Excel_Python 2.7 - Fatal编程技术网

在python中循环并创建JSON文件的函数无效

在python中循环并创建JSON文件的函数无效,python,json,excel,python-2.7,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':

我有一个解析过的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年”和“excel国家/地区”。 在本例中,应使用8而不是2对象创建json

我编写的函数使用正确的名称创建了8个JSON对象,但它弄乱了要添加的所有其他额外字段(即,在本例中为“excel国家”和“escel年”),而不是一个“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},
   .............
错误在哪里?
谢谢

您更改了
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

谢谢你,丹尼尔,这很有效@GiuseppeCardellini:那就把它标记为接受的答案。嗨,伙计们,对不起,我是这里发帖的新手,在写“好”帖子方面没有太多经验。你能告诉我哪里出了问题,我应该改进什么以避免将来出现同样的问题吗?谢谢