如何实现字母映射含该字母单词的字典?代码修正求助
问题:生成字母对应包含该字母的单词列表字典
需求为生成一个以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)
代码说明
- 将输入句子转为小写并拆分为单词列表,这是正确处理单词的基础
- 用字典推导式初始化包含所有26个小写字母的字典,每个键默认对应空列表,避免遗漏字母
- 遍历每个单词,提取单词中的唯一字母,将单词添加到这些字母对应的列表中,确保同一单词不会重复出现在同一字母的列表里
- 最后对字典按字母顺序排序,符合输出格式要求
内容的提问来源于stack exchange,提问作者TheCodeHunter
相关产品推荐
相关产品推荐

