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

