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

如何用Python 3.4构建按名称和分组排序的结构化数据表格

实现方法:将数据库记录转换为分组状态表格(Python 3.4)

没问题,我来帮你搞定这个需求!咱们可以分步骤用Python 3.4实现,从处理原始数据到生成目标格式的表格/CSV都能搞定,还能保证按Name和分组排序。

第一步:准备原始数据(模拟从数据库获取的记录)

首先把你从数据库拿到的记录整理成列表形式,比如:

# 示例原始数据(替换成你实际的数据库查询结果)
raw_data = [
    ('group1', 272, 'Alex'),
    ('group1', 268, 'Alex1'),
    ('group2', 267, 'Kate'),
    ('group2', 138, 'Stive'),
    ('group2', 3081, 'Stive2'),
    ('group3', 265, 'Dave')
]

第二步:提取并排序Name和分组

先把所有唯一的Name和分组提取出来,并且按要求排序:

# 提取所有唯一的Name并按字母排序
names = sorted({item[2] for item in raw_data})
# 提取所有唯一的分组并按字母排序
groups = sorted({item[0] for item in raw_data})

第三步:构建状态映射字典

创建一个字典,每个Name对应所有分组的初始状态为False,然后遍历原始数据把对应分组的状态改成True:

# 初始化结果:每个Name对应所有分组的状态默认是False
result = {name: {group: False for group in groups} for name in names}

# 遍历原始数据,更新对应Name的分组状态
for group, _, name in raw_data:
    # 忽略原始数据里的第二个数值字段(用_占位)
    result[name][group] = True

第四步:生成可视化表格或CSV文件

方案1:直接打印格式化后的表格

这样可以在控制台看到整齐的结果:

# 打印表头(左对齐,宽度10)
header = ['Name'] + groups
print('{:<10}'.format(header[0]) + ''.join(['{:<10}'.format(g) for g in header[1:]]))

# 打印每一行数据
for name in names:
    row_values = [str(result[name][g]) for g in groups]
    print('{:<10}'.format(name) + ''.join(['{:<10}'.format(val) for val in row_values]))

输出效果会是:

Name       group1     group2     group3     
Alex       True       False      False      
Alex1      True       False      False      
Dave       False      False      True       
Kate       False      True       False      
Stive      False      True       False      
Stive2     False      True       False      

方案2:写入CSV文件

如果需要保存成CSV方便后续使用,用Python内置的csv模块即可:

import csv

# 打开CSV文件并写入(newline=''避免空行)
with open('group_status.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    # 写入表头
    writer.writerow(['Name'] + groups)
    # 写入每一行数据
    for name in names:
        row = [name] + [result[name][g] for g in groups]
        writer.writerow(row)

生成的CSV文件打开后就是你要的结构,而且行和列都是有序的。

关键说明

  • 我们用集合去重,再用sorted()保证Name和分组都按字母顺序排列,完全符合你的排序要求
  • 原始数据里的第二个数值字段(比如272)因为不需要,所以用_占位忽略掉
  • 代码完全兼容Python 3.4,不用怕版本问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:20:48