如何从标准输入构建键值对字典(无需计数,支持多组输入)

如何从标准输入构建键值对字典(无需计数,支持多组输入)

本文介绍一种简洁可靠的方式,通过逐行读取标准输入(每行含一个键和一个值,空格分隔),动态构建并输出按字母序排序的字典,适用于任意数量的键值对输入,无需预设次数或额外循环控制。

本文介绍一种简洁可靠的方式,通过逐行读取标准输入(每行含一个键和一个值,空格分隔),动态构建并输出按字母序排序的字典,适用于任意数量的键值对输入,无需预设次数或额外循环控制。

在原始代码中,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

上一篇 2026-07-19 22:00
下一篇 2026-07-19 22:52

相关推荐