将包含简单值和嵌套字典的字典导出为CSV

时间:2016-06-18 15:38:03

标签: python csv dictionary

我正在访问第三方API,该API返回包含简单值和嵌套(嵌入式?)词典的字典。我需要将其转换为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 个答案:

答案 0 :(得分:1)

如果您不需要accounts其他任何可以做的事情:

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

否则,.copy()它也会这样做。