我有这段代码 从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
答案 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
中的最后一项 - 你已经销毁了之前的其他任何值。
第一号建议:停止重复使用标识符以达到许多不同的,不兼容的目的。对自己做出承诺,在任何一个程序中,任何标识符都不得绑定到两个不同的东西。这将至少减少你经理堆积在如此少的几行上的令人难以置信的混乱。