将字典写入csv或xlsx python
我有一本叫做master的字典,它的值的格式是将字典写入csv或xlsx python,python,pandas,csv,dictionary,Python,Pandas,Csv,Dictionary,我有一本叫做master的字典,它的值的格式是 { 'Company': { 'App': 4, 'App2': 5, 'App3': 82, etc} 'Company2': { 'App': 3, 'App2': 1, 'App3': 48, etc}
{
'Company': {
'App': 4,
'App2': 5,
'App3': 82,
etc}
'Company2': {
'App': 3,
'App2': 1,
'App3': 48,
etc}
'Company3' etc
我尝试了几个不同的答案:以open('test.csv','wb')作为f的
:
writer=csv.writer(f)
对于myDict.iteritems()中的行:
writer.writerow(行)
其他问题与此相关,但没有一个给出我想要的结果。 需要将csv或xslx中的输出格式化为
公司作为列标题,从B列开始,从第2行开始,从A列的行开始,每个应用的计数填入每个关联公司列下的行。
似乎只得到没有正确分列的输出,或者没有正确包含计数
master={}
业务列表=[“公司1”、“公司2”、“公司3”等]
对于业务列表中的业务:
所选的商业应用程序={}
curr\u business\u apps=business\u map.get(business)
freqs=计数器(当前业务应用程序)
对于键,freqs.items()中的val:
如果在app_map.keys()中输入密钥:
所选的商业应用程序[键]=val
主[业务]=所选的\u业务\u应用程序
这将是使用Python内置的csv
和defaultdict
功能的最简单方法。它的工作原理是首先根据应用程序而不是公司创建一个新的字典字典。然后它使用一个csv.DictWriter()
,它获取一个字典并将其转换为csv格式的输出行:
from collections import defaultdict
import csv
master = {
'Company': {'App': 4, 'App2': 5, 'App3': 82},
'Company2': {'App': 3, 'App2': 1, 'App3': 48}}
all_apps = defaultdict(dict)
# Create a dictionary in terms of apps e.g. {'App' : {'Company' : 4, 'Company2' : 3}}
for company, apps in master.items():
for app, count in apps.items():
all_apps[app][company] = count
with open('output.csv', 'wb') as f_output:
csv_output = csv.DictWriter(f_output, fieldnames=['App'] + sorted(master.keys()))
csv_output.writeheader()
for app, row in sorted(all_apps.items()):
row.update({'App': app})
csv_output.writerow(row)
这将为您提供一个output.csv
文件,其中包含:
应用程序、公司、公司2
应用程序,4,3
附录2,5,1
附件3,82,48
编辑问题的可能副本,以包括您迄今为止编写的Python代码。@J.Yonathan我也尝试过类似的方法,但没有成功,这就是我尝试过的方法。另外,我的字典中有大约3000个实体,所以我没有在您链接的页面中执行任何一行workbook=xlsxwriter.workbook('file.xlsx')worksheet=workbook.add_worksheet()row=0 col=0 for key in master.keys():row+=1 worksheet.write(row,col,key)for master[key]:worksheet.write(行,列+1,项)行+=1工作簿。关闭()
我每个公司大约有3000个应用程序,大约有100个公司,这有关系吗?所以按上述方式键入它们不是一个理想的步骤?你说你已经有了master
?除此之外,不需要额外键入。无论你有多少个应用程序/公司,它都应该有效。如果你愿意,你可以发布一个链接到你的测试file使用类似于Yeah的东西,我很抱歉这一切都是新的,但我会在我的OP中放入最后一段代码,因为我无法共享我的测试文件。当您删除我的master
示例并将其替换为您的示例时,是否会出错?您可以尝试business\u list=business\u map.keys()
要自动创建该列表吗?