
本文介绍一种简洁可靠的方式,通过逐行读取标准输入(每行含一个键和一个值,空格分隔),动态构建并输出按字母序排序的字典,适用于任意数量的键值对输入,无需预设次数或额外循环控制。
本文介绍一种简洁可靠的方式,通过逐行读取标准输入(每行含一个键和一个值,空格分隔),动态构建并输出按字母序排序的字典,适用于任意数量的键值对输入,无需预设次数或额外循环控制。
在原始代码中,build_dictionary 函数仅调用一次 input() 和 int(input()),因此只能接收一对键值,且未利用参数 words(传入的 input().split() 结果被完全忽略)。更严重的是,程序缺乏明确的输入终止机制,导致用户难以判断何时结束输入。
推荐采用基于 sys.stdin 的流式读取方式,它天然支持多行输入,并在用户发送 EOF(Linux/macOS 为 Ctrl+D,Windows 为 Ctrl+Z)时自动停止:
import sys
if __name__ == '__main__':
word_dict = {}
for line in sys.stdin:
line = line.strip()
if not line: # 跳过空行
continue
parts = line.split()
if len(parts) < 2:
print("警告:跳过格式错误的行(需至少两个字段)")
continue
key, val = parts[0], ' '.join(parts[1:]) # 允许值中含空格(如需要)
word_dict[key] = val
# 按键字母序排序并输出
for key in sorted(word_dict.keys()):
print(f'{key} - {word_dict[key]}')
✅ 关键优势:
- 无需预设输入行数:依靠 EOF 信号自然终止;
- 健壮性更强:自动跳过空行、过滤格式异常输入;
- 灵活性高:val 可支持多词(使用 ‘ ‘.join(parts[1:])),避免因 int(input()) 强制转换导致的类型错误;
- 零冗余逻辑:不依赖无意义的函数封装或未使用的参数。
⚠️ 注意事项:
- 若业务要求值必须为整数,请将 word_dict[key] = val 改为 word_dict[key] = int(val),并添加 try/except 处理转换异常;
- 交互式调试时,可在终端输入多行后按 Ctrl+D(Mac/Linux)或 Ctrl+Z(Windows)触发 EOF;
- 不建议在 Jupyter 或某些 IDE 中直接运行此代码(因 EOF 行为可能受限),推荐在命令行终端执行。
该方案摒弃了硬编码的单次输入陷阱,回归 Python 流式 I/O 的本质——让输入驱动流程,而非由开发者猜测用户意图。
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/shoujipingce/127087.html