Python for循环不迭代

时间:2014-03-16 22:14:38

标签: python loops dictionary

我正在尝试遍历字符串列表,如果它们的长度等于用户输入的长度,则将它们添加到字典中。当最后一个循环运行时,它只运行一次。我知道这是因为字典中的第一个单词长度为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

3 个答案:

答案 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]