如何用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
相关产品推荐
相关产品推荐

