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

如何用Python将字典列表按key分组导出为指定格式CSV文件?

Python 按字典key分组并生成指定格式CSV文件

问题描述

现有如下结构的字典列表:

listofdictionaries = [{'key1': ('A', 'B', 'C'), 'key2':[1, 2, 3]}, 
                      {'key1': ('AA', 'BB', 'CC'), 'key2':[1, 2, 3]}, 
                      {'key1': ('AAA', 'BBB', 'CCC'), 'key2':[4, 5, 6]}]

需要按key2的值分组,将相同key2对应的key1值归为一组,生成如下格式的表格并输出为CSV文件:

Group 1Group 1 ItemsGroup 2Group 2 Items
[1,2,3](A,B,C)[4,5,6](AAA,BBB,CCC)
(AA,BB,CC)

解决方案

步骤1:分组处理数据

使用collections.defaultdict按key2的值对key1进行分组,由于列表不可哈希,需将key2转换为元组作为字典的键。

步骤2:构建CSV行数据

确定分组后最长的元素列表长度,以此为基准生成每一行数据:第一行显示分组的key2值,后续行对应位置留空;每个分组的key1值依次填充,不足的位置留空。

完整代码实现

from collections import defaultdict
import csv

# 原始数据
listofdictionaries = [{'key1': ('A', 'B', 'C'), 'key2':[1, 2, 3]}, 
                      {'key1': ('AA', 'BB', 'CC'), 'key2':[1, 2, 3]}, 
                      {'key1': ('AAA', 'BBB', 'CCC'), 'key2':[4, 5, 6]}]

# 按key2分组,将列表转成元组作为键
groups = defaultdict(list)
for item in listofdictionaries:
    key_tuple = tuple(item['key2'])
    groups[key_tuple].append(item['key1'])

# 将分组转为有序列表,确保Group 1、Group 2的顺序
group_list = list(groups.items())
# 确定需要生成的最大行数
max_row_count = max(len(items) for _, items in group_list)

# 构建表头
header = []
for i in range(len(group_list)):
    header.append(f"Group {i+1}")
    header.append(f"Group {i+1} Items")

# 构建每一行的数据
csv_rows = []
for row_idx in range(max_row_count):
    current_row = []
    for group_key, group_items in group_list:
        # 分组列:仅第一行显示key,其余行留空
        current_row.append(str(group_key) if row_idx == 0 else "")
        # 分组项列:有对应元素则填充,否则留空
        current_row.append(str(group_items[row_idx]) if row_idx < len(group_items) else "")
    csv_rows.append(current_row)

# 写入CSV文件
with open('grouped_output.csv', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(header)
    writer.writerows(csv_rows)

输出效果

运行代码后会生成grouped_output.csv文件,用表格工具打开后将呈现需求中的格式,原始CSV内容如下:

Group 1,Group 1 Items,Group 2,Group 2 Items
"(1, 2, 3)","('A', 'B', 'C')","(4, 5, 6)","('AAA', 'BBB', 'CCC')"
,"('AA', 'BB', 'CC')",,

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:45:23