You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现字典写入CSV/XLSX:特定格式输出需求求助

我明白你要的表格结构了——A列从第二行开始是应用名称,B列及以后的表头是公司名称,交叉单元格是对应应用在该公司的计数。之前用csv.writer直接写iteritems()的方式,只会把每个应用-公司计数的键值对拆成零散的行,完全不符合你要的二维表格布局。

下面分CSV和XLSX两种方案给你实现:


方案1:导出为CSV文件

首先得先梳理数据的结构逻辑:

  1. 提取所有公司名称作为表头(从B列开始,所以表头第一个元素是空字符串,对应A1单元格)
  2. 提取所有应用名称作为A列的纵向内容(从第二行开始)
  3. 构建每行数据:应用名 + 对应各公司的计数(没有对应计数时填0或空值)

假设你的master字典结构是这样的(如果结构不同,核心逻辑可以微调):

master = {
    "应用X": {"公司甲": 10, "公司乙": 5},
    "应用Y": {"公司甲": 3, "公司丙": 8},
    "应用Z": {"公司乙": 7}
}

对应的CSV生成代码:

import csv

# 1. 收集所有唯一的公司名称,排序可选
companies = sorted({company for app in master.values() for company in app.keys()})
# 2. 构造表头:A1为空,后续是公司名
header = [""] + companies
# 3. 准备每行数据:应用名 + 对应各公司的计数
rows = []
for app_name, company_counts in master.items():
    row = [app_name]
    for company in companies:
        # 没有对应计数就填0,也可以换成""表示空单元格
        row.append(company_counts.get(company, 0))
    rows.append(row)

# 4. 写入CSV文件,utf-8编码避免中文乱码
with open('app_company_counts.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(header)  # 写入表头
    writer.writerows(rows)   # 写入所有行数据

生成的CSV打开后完全符合你的要求:

  • A1为空,B1、C1等依次是公司名称
  • A2开始纵向排列应用名,对应单元格显示该应用在对应公司的计数

方案2:导出为XLSX文件(用openpyxl)

如果需要导出为XLSX格式,推荐用openpyxl库(先通过pip install openpyxl安装),代码逻辑和CSV类似,还能额外设置格式(比如表头加粗):

from openpyxl import Workbook
from openpyxl.styles import Font

# 假设master字典结构同上
master = {
    "应用X": {"公司甲": 10, "公司乙": 5},
    "应用Y": {"公司甲": 3, "公司丙": 8},
    "应用Z": {"公司乙": 7}
}

wb = Workbook()
ws = wb.active
ws.title = "应用计数统计"

# 1. 写入表头
companies = sorted({company for app in master.values() for company in app.keys()})
ws.cell(row=1, column=1).value = ""  # A1留空
for col_idx, company in enumerate(companies, start=2):
    cell = ws.cell(row=1, column=col_idx)
    cell.value = company
    cell.font = Font(bold=True)  # 表头加粗,可选设置

# 2. 写入应用名称和对应计数
row_idx = 2
for app_name, company_counts in master.items():
    # 应用名写入A列
    ws.cell(row=row_idx, column=1).value = app_name
    # 对应公司计数写入B列及以后
    for col_idx, company in enumerate(companies, start=2):
        ws.cell(row=row_idx, column=col_idx).value = company_counts.get(company, 0)
    row_idx += 1

# 保存XLSX文件
wb.save('app_company_counts.xlsx')

小提示:

如果你的master字典结构和示例相反(比如以公司为键,对应应用计数),只需要调整遍历和提取数据的逻辑即可,核心是先明确行和列的维度,再填充对应的值。

内容的提问来源于stack exchange,提问作者DancinDeku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:20:54