我正在尝试遍历字符串列表,如果它们的长度等于用户输入的长度,则将它们添加到字典中。当最后一个循环运行时,它只运行一次。我知道这是因为字典中的第一个单词长度为8个字符,当用户输入为8时,它只打印该单词,而不打印其他8个字符单词。如果输入为3,则打印空字典。为什么我的循环没有迭代列表行列表中的所有单词?
wordLength = raw_input("Enter a word length ")
word_dict = {}
infile = open("dictionary.txt")
for line in infile:
line = line.strip()
linelist = line.split(" ")
for word in linelist:
if len(word) == int(wordLength):
if len(word) in word_dict:
word_dict[len(word)] = word_dict[len(word)].append(word)
else:
word_dict[len(word)] = word
print word_dict
答案 0 :(得分:1)
每次第一个循环运行时,它会将linelist
设置为新值,覆盖任何旧值。在第一个循环运行后,linelist
将仅包含文件最后一行的split
结果。每次处理文件的一行时,你都会丢弃你在上一行中所做的一切。
如果要构建字典文件中所有单词的列表,则需要在for line in infile
循环的每次迭代中创建一个列表并附加到它。
另外,如果每一行只有一个单词,那么在每一行上使用split
都没有多大意义,因为不会有分裂。
答案 1 :(得分:0)
您的第二个循环没有缩进,因此您只能在linelist
的最后一个值上运行它。
答案 2 :(得分:0)
for line in infile:
line = line.strip()
linelist = line.split(" ")
每次执行linelist = line.split(" ")
时,都会用最后一行的单词替换旧的行列表。该列表最后只保留最后一行的单词。如果您想要整个文件中的单词,请创建一个行列表并使用新单词扩展它:
linelist = []
for line in infile:
# split with no argument splits on any run of whitespace, trimming
# leading and trailing whitespace
linelist += line.split()
# ^ this means add the elements of line.split() to linelist
因为显然每个单词都在自己的行上,所以你甚至不应该使用split
:
words = [line.strip() for line in infile]