2016-06-18 126 views
0

我正在访问第三方API,该API返回包含简单值和嵌套(嵌入?)字典的字典。我需要将其转换为CSV文件,但我需要从嵌套字典中提取和导出特定值。将简单值和嵌套字典导出为CSV字典

这里就是我得到回来的一个简单的例子:

accounts = { 
    'Id': '0131232', 
    'AccountName': 'CompanyX', 
    'Active': False, 
    'LastModifiedBy': {'type': 'User', 'Id': '', 'Name': 'Joe Smith'} 
}, 
{ 
    'Id': '987654', 
    'AccountName': 'CompanyY', 
    'Active': True, 
    'LastModifiedBy': {'type': 'User', 'Id': '', 'Name': 'Mary Johnson'} 
} 

我想这个导出为CSV与下面的代码:

with open('output.csv', 'w') as f: 
    dwriter = csv.DictWriter(f, accounts[0].keys()) 
    dwriter.writeheader() 
    dwriter.writerows(accounts) 

f.close() 

我想什么CSV文件如下:

Id,AccountName,Active,LastModifiedBy 
0131232,CompanyX,False,Joe Smith 
987654,CompanyY,True,Mary Johnson 

什么我越来越上面我的代码如下:

Id,AccountName,Active,LastModifiedBy 
0131232,CompanyX,False,"{'type': 'User', 'Id': '', 'Name': 'Joe Smith'}" 
987654,CompanyY,True,"{'type': 'User', 'Id': '', 'Name': 'Mary Johnson'}" 

很显然,我需要提取从嵌套的字典中的键值对我想和值分配到更高级别的字典。我的问题是,我该怎么做,同时仍然处理简单的值?

看起来这可以用字典理解完成,但我不确定我可以用这个做一个条件。

另外,我可以通过每个记录,检查每个值,看看它是否是一本字典,并写出我想要一个新字典的值,但是这感觉有点过重。

完全披露:我是Python新手,很抱歉,如果我错过了一些明显的东西。

谢谢! 克里斯 -

回答

1

如果您不需要accounts为别的,你可以这样做:

for account in accounts: 
    account['LastModifiedBy'] = account['LastModifiedBy']['Name'] 

否则,.copy()它,做相同的。

+0

谢谢!那很简单。猜猜我正在反思它。 – cweirup