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

如何实现字母映射含该字母单词的字典?代码修正求助

问题:生成字母对应包含该字母的单词列表字典

需求为生成一个以26个小写字母为键的字典,每个键对应的值是输入句子中包含该字母的单词列表。输入句子「Mister Jack, you are a good coder」时,现有代码输出不符合预期,寻求修正方案。

原代码

import string

alphabet = string.ascii_lowercase
sentence= (input("Write your sentence: " )).lower()
letter_notfound=(sorted(list((set(string.ascii_lowercase) - set("".join(sentence.split()))))))
print (letter_notfound)

letter_list=list(alphabet)
unique_letter = (sorted(list((set(letter_list)-set(letter_notfound)))))

dico={}

for key in (letter_list):
    for char in sentence:
        if char in unique_letter:
         dico[char] = [sentence]
    for char in letter_notfound:
        dico[char] = []
print(dict(sorted(dico.items())))

输入

Mister Jack, you are a good coder

当前输出

{'a': ['mister jack, you are a good coder'], 'b': [], 'c': ['mister jack, you are a good coder'], 'd': ['mister jack, you are a good coder'], 'e': ['mister jack, you are a good coder'], 'f': [], 'g': ['mister jack, you are a good coder'], 'h': [], 'i': ['mister jack, you are a good coder'], 'j': ['mister jack, you are a good coder'], 'k': ['mister jack, you are a good coder'], 'l': [], 'm': ['mister jack, you are a good coder'], 'n': [], 'o': ['mister jack, you are a good coder'], 'p': [], 'q': [], 'r': ['mister jack, you are a good coder'], 's': ['mister jack, you are a good coder'], 't': ['mister jack, you are a good coder'], 'u': ['mister jack, you are a good coder'], 'v': [], 'w': [], 'x': [], 'y': ['mister jack, you are a good coder'], 'z': []}

期望输出

{'a': ['are', 'jack,'], 'b': [], 'c': ['coder', 'jack,'], 'd': ['coder'], 'e': ['coder', 'mister'], 'f': [], 'g': [], 'h': [], 'i': ['mister'], 'j': ['jack,'], 'k': ['jack,'], 'l': [], 'm': ['mister'], 'n': [], 'o': ['coder', 'you', 'good'], 'p': [], 'q': [], 'r': ['coder', 'mister'], 's': ['mister'], 't': ['mister'], 'u': ['you'], 'v': [], 'w': [], 'x': [], 'y': ['you'], 'z': []}

问题分析

原代码存在核心问题:

  • 未正确拆分句子为单词,直接将完整句子作为值存入字典,而非对应字母的单词列表
  • 循环逻辑混乱,遍历字符时直接覆盖字典值,未针对每个字母筛选对应单词
  • 处理不存在的字母时逻辑冗余,且未保证所有字母都被正确初始化

修正后的代码

import string

alphabet = string.ascii_lowercase
sentence = input("Write your sentence: ").lower()
# 拆分句子为单词列表
words = sentence.split()

# 初始化字典,所有字母默认对应空列表
letter_dict = {char: [] for char in alphabet}

# 遍历每个单词,将单词添加到其包含的字母对应的列表中
for word in words:
    # 去重单词中的字母,避免同一单词重复添加到同一字母列表
    unique_chars = set(word)
    for char in unique_chars:
        if char in alphabet:
            letter_dict[char].append(word)

# 按字母顺序排序字典
sorted_letter_dict = dict(sorted(letter_dict.items()))
print(sorted_letter_dict)

代码说明

  1. 将输入句子转为小写并拆分为单词列表,这是正确处理单词的基础
  2. 用字典推导式初始化包含所有26个小写字母的字典,每个键默认对应空列表,避免遗漏字母
  3. 遍历每个单词,提取单词中的唯一字母,将单词添加到这些字母对应的列表中,确保同一单词不会重复出现在同一字母的列表里
  4. 最后对字典按字母顺序排序,符合输出格式要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:40:37