我必须写一个基于打开的文件的函数,该文件每行有一个小写单词。我必须返回一个字典,字典中的键以单个小写字母表示,每个值都是文件中以该字母开头的单词的列表。(字典中的键仅来自文件中出现的单词的字母。)
这是我的代码:
def words(file):
line = file.readline()
dict = {}
list = []
while (line != ""):
list = line[:].split()
if line[0] not in dict.keys():
dict[line[0]] = list
line = file.readline()
return dict
然而,当我自己测试它时,我的函数似乎没有返回所有的值。如果有两个以上的单词以某个字母开头,只有第一个显示为输出中的值。我做错了什么?
例如,文件应该返回:
{'a': ['apple'], 'p': ['peach', 'pear', 'pineapple'], \
'b': ['banana', 'blueberry'], 'o': ['orange']}, ...
。。。但是回来。。
{'a': ['apple'], 'p': ['pear'], \
'b': ['banana'], 'o': ['orange']}, ...
7条答案
按热度按时间disho6za1#
尝试这个解决方案,它考虑到了多行中有相同字符开头的单词的情况,并且它不使用
defaultdict
。我还简化了函数:ffx8fchx2#
您不会为每个额外的字母添加到列表中。请尝试:
g52tjvyc3#
似乎每个字典条目都应该是一个列表。在字典键上使用append方法。
ubof19bj4#
牺牲性能(在一定程度上)来换取优雅:
kxxlusnw5#
像这样的东西应该管用
第一次发现一个新的字母时,会有一个KeyError,该字母的后续出现会导致该单词被追加到现有列表中
另一种方法是用所需的键预先填充dict
我将把它作为一个练习来解决
dct[word[0]] += [word]
为什么不起作用ss2ws0br6#
试试这个功能
zzwlnbp87#
具体问题是
dict[line[0]] = list
替换了新键的值。