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

Python字典格式化导出TXT问题:循环重复输出键的修正方案

解决Python字典导出TXT的格式化问题

正确实现代码

obstacles = {4: [(5, 6), (9, 11)],
              5: [(9, 11), (19, 20), (30, 34)],
              13: [(5, 8), (9, 11), (17, 19), (22, 25), (90, 100)]}

with open('filename.txt', 'w') as f:
    # 按键排序,保证输出顺序与示例一致(Python3.7+字典默认有序,排序可选)
    for key in sorted(obstacles.keys()):
        # 格式化键为三位带前导零的字符串,末尾加冒号
        key_str = f"{key:03d}:"
        # 将每个元组转换为"起始-结束"格式的字符串
        range_strs = [f"{start}-{end}" for start, end in obstacles[key]]
        # 用固定宽度格式化每个范围字符串,实现对齐效果
        formatted_ranges = "    ".join(f"{rs:>6}" for rs in range_strs)
        # 拼接整行内容,键后加3个空格分隔
        line = f"{key_str}   {formatted_ranges}\n"
        f.write(line)

输出结果

004:    5-6      9-11
005:   9-11    19-20    30-34
013:    5-8      9-11    17-19    22-25    90-100

错误原因分析

  1. 第一段代码问题:在遍历每个元组时重复输出键名,导致每个范围单独占一行,不符合一行对应一个键的要求。
  2. 第二段代码问题:错误地将所有元组的起始值、结束值分别拼接成字符串,完全偏离了每个元组单独格式化为"a-b"的需求。

关键实现细节

  • 每个键仅输出一次,对应所有关联的范围字符串;
  • 用列表推导式快速将元组转换为目标格式的字符串;
  • 通过f"{rs:>6}"将每个范围字符串设置为6字符宽度、右对齐,再用4个空格分隔,实现和示例一致的对齐效果;
  • 可选对键排序,确保输出顺序稳定可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:55:30