在python中循环并创建JSON文件的函数无效
我有一个解析过的excel文件和一个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=[{'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:那就把它标记为接受的答案。嗨,伙计们,对不起,我是这里发帖的新手,在写“好”帖子方面没有太多经验。你能告诉我哪里出了问题,我应该改进什么以避免将来出现同样的问题吗?谢谢