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

Python如何按指定顺序打印值为列表的字典并生成目标表格

解决方案

问题根因

你当前直接按字段累计值的方式丢失了每个值对应的行位置信息,所以无法对齐不同列的输出位置,需要先按行拆分原始数据。

完整实现代码

lst = [
    ['A', 1], ['B', 0], ['C', 2], ['D', 7],
    ['D', 2], ['E', 1],
    ['C', 0], ['D', 3], ['F', 8],
    ['A', 1], ['B', 0], ['C', 4], ['D', 5], ['H', 9]
]
columns = ['A', 'B', 'C', 'D', 'E', 'F', 'H']

# 第一步:按行拆分原始数据(每行以D字段为分隔标记,你提供的示例中每行固定包含D)
rows = []
current_row = {}
for k, v in lst:
    # 遇到D且当前行已有数据,说明上一行结束
    if k == 'D' and current_row:
        rows.append(current_row)
        current_row = {}
    current_row[k] = v
rows.append(current_row)  # 加入最后一行

# 第二步:按要求格式化输出
# 打印表头
print('\t'.join(columns))
# 记录A、B上一次显示的值,相同则后续填空
prev_a = None
prev_b = None
for row in rows:
    output_cells = []
    for col in columns:
        cell_val = row.get(col, '')
        # 处理A、B列仅首次显示的逻辑
        if col == 'A':
            if cell_val == prev_a:
                cell_val = ''
            else:
                prev_a = cell_val
        elif col == 'B':
            if cell_val == prev_b:
                cell_val = ''
            else:
                prev_b = cell_val
        output_cells.append(str(cell_val))
    print('\t'.join(output_cells))

输出效果

A	B	C	D	E	F	H
1	0	2	7			
		0	2	1		
			3		8	
		4	5			9

如果需要更美观的对齐表格,可以安装tabulate库实现自动格式化:

from tabulate import tabulate

table_data = [columns]
prev_a = None
prev_b = None
for row in rows:
    output_cells = []
    for col in columns:
        cell_val = row.get(col, '')
        if col == 'A':
            if cell_val == prev_a:
                cell_val = ''
            else:
                prev_a = cell_val
        elif col == 'B':
            if cell_val == prev_b:
                cell_val = ''
            else:
                prev_b = cell_val
        output_cells.append(str(cell_val))
    table_data.append(output_cells)

print(tabulate(table_data, headers='firstrow', tablefmt='grid'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:09:01