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
错误原因分析
- 第一段代码问题:在遍历每个元组时重复输出键名,导致每个范围单独占一行,不符合一行对应一个键的要求。
- 第二段代码问题:错误地将所有元组的起始值、结束值分别拼接成字符串,完全偏离了每个元组单独格式化为"a-b"的需求。
关键实现细节
- 每个键仅输出一次,对应所有关联的范围字符串;
- 用列表推导式快速将元组转换为目标格式的字符串;
- 通过
f"{rs:>6}"将每个范围字符串设置为6字符宽度、右对齐,再用4个空格分隔,实现和示例一致的对齐效果; - 可选对键排序,确保输出顺序稳定可控。
内容的提问来源于stack exchange,提问作者zyrax02
相关产品推荐
相关产品推荐

