如何将用户输入词汇存入字典并分配唯一不变序号
问题描述
现有如下Python代码:
s = set() i = 0 while True: user_input = input("enter words: ") for words in user_input.strip().split(): words_from_list = words.strip().split() for x in words_from_list: s.add(x) for i in s: print(i)
该代码仅能实现词汇去重存储,现在需要修改代码达成以下功能:
- 持续接收用户输入的文本
- 为每个首次出现的词汇分配唯一递增序号
- 重复出现的词汇保持原有序号
输出示例如下:
enter text: how are you dear
how 1
are 2
you 3
dear 4
enter text: how was your morning
how 1
your 5
was 6
morning 7
dear 4
(注:原代码使用set导致输出顺序随机,需求仅要求重复元素保持相同序号,输出顺序可随字典特性变化)
修改后的代码
word_to_id = {} current_id = 1 while True: user_input = input("enter text: ") # 分割输入为单词列表,自动去除前后空白 words = user_input.strip().split() for word in words: # 仅为首次出现的单词分配序号 if word not in word_to_id: word_to_id[word] = current_id current_id += 1 # 输出所有已记录的词汇及其对应序号 for word, idx in word_to_id.items(): print(f"{word} {idx}") # 空行分隔不同输入的输出结果 print()
关键修改说明
- 用**字典
word_to_id**替代原代码的set:字典的键值对结构可以直接存储词汇与序号的映射,天然满足“重复词汇复用原序号”的需求 - 新增
current_id计数器:维护当前可用的最新序号,每次新增词汇时自动递增,保证序号唯一且连续 - 简化输入处理逻辑:直接对输入字符串执行一次
strip().split()得到单词列表,删除原代码中多余的嵌套循环,提升效率 - 修复原代码的缩进错误:确保
print语句在循环块内执行,避免语法错误 - 利用字典的键唯一性:自动跳过已存在的词汇,无需额外判断逻辑
内容的提问来源于stack exchange,提问作者Fahad Ali
相关产品推荐
相关产品推荐

