Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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
将字典写入csv或xlsx python_Python_Pandas_Csv_Dictionary - Fatal编程技术网

将字典写入csv或xlsx python

将字典写入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}

我有一本叫做master的字典,它的值的格式是

{
  '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()
要自动创建该列表吗?