为什么这个字典行数不起作用?

时间:2010-05-24 04:04:20

标签: python

我有这段代码 从d = {}开始的代码的最后一位 即时通讯试图用文本中的行号打印单词,但它不能正常工作,只打印任何人知道为什么的单词??? 尽快需要帮助

import sys
import string

text = []
infile = open(sys.argv[1], 'r').read()
for punct in string.punctuation:
    infile = infile.replace(punct, "")
    text = infile.split("\n")

dict = open(sys.argv[2], 'r').read()
dictset = []
dictset = dict.split()

words = []
words = list(set(text) - set(dictset))
words = [text.lower() for text in words]
words.sort()

d = {}
counter = 0
for lines in text:
    counter += 1
if word not in d:
    d[words] = [counter]
else:
    d[words.append[counter]
print(word, d)

此代码输出:

helo
goin
ist

我希望它输出:

helo #tab# 3   4 
goin #tab# 1   2

1 个答案:

答案 0 :(得分:2)

text WORDS 的列表, LINES 的列表。当你这样做时:

text = infile.split()

你是不可逆转的,永远抛弃了一个单词和它所在行之间的所有联系。所以当你后来写的时候

for lines in text:

这是谎言:text的项目是不是行。如果不是,那么这个其他之前的行:

 words = list(set(text) - set(dictset))

会完全被破坏 - 这个取决于 text的项目是单词,而不是行。

顺便说一下,当你这样做时:

  words = [text.lower() for text in words]

text现在被绑定到words中的最后一项 - 你已经销毁了之前的其他任何值。

第一号建议:停止重复使用标识符以达到许多不同的,不兼容的目的。对自己做出承诺,在任何一个程序中,任何标识符都不得绑定到两个不同的东西。这将至少减少你经理堆积在如此少的几行上的令人难以置信的混乱。