Python 为什么字典行号计数不起作用?

Python 为什么字典行号计数不起作用?,python,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 = ope

我有这段代码,代码的最后一位从
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

文本
单词的列表,而不是行的列表。当您这样做时:

text = infile.split()
  words = [text.lower() for text in words]
你是不可逆转的,永远抛弃了一个单词和它所在行之间的所有联系。所以当你以后写信的时候

for lines in text:
这是一个谎言:
文本
的项目是单词而不是行。如果不是,那么前面的另一行:

 words = list(set(text) - set(dictset))
将被完全破坏——这取决于
文本
的项目是文字,而不是行

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

text = infile.split()
  words = [text.lower() for text in words]
text
现在被左键绑定到
words
中的最后一项——您已经销毁了它以前的任何其他值


建议一:停止为许多不同的、不兼容的目的重用标识符。向自己承诺,在任何一个程序中,任何标识符都不应绑定到两个不同的事物上。这至少可以减少您管理者在这么少的行上堆积的令人难以置信的完全混乱。

您的代码甚至在语法上都是无效的。。。如果你想得到这方面的帮助,你必须解决这个问题。更不用说,解释一下它的工作原理如何?示例输出,包括您得到的和应该提供的内容?您所说的sytacillay valid是什么意思?我该如何修复它?好的,我将添加输出和它应该做的事情。由于许多原因,该代码无法运行或工作:括号不平衡、缩进不正确、变量
word
从未设置,等等。请发布您的实际代码。另外,您可以使用
collections.defaultdict(list)
而不是普通的dict来简化代码,这样您就不必测试
if-word-in-d
:您只需说
d[word]。append(counter)
。重复?@jad,您重新从头开始重写,并发誓永不,对不同的事物重复使用标识符。你不能只是避免把
文本
列成一个单词列表,因为正如我指出的那样,当你用它做
集合
时,你必须这样做——但是当你需要行号时,你需要一个行列表(拆分行,而不是拆分行)。因此,很明显,您不能同时使用单个标识符
文本
(除此之外,还可以使用该列表中的控制变量)。使用不同、更清晰、明确的标识符,从头开始重新思考你的家庭作业。我只想找到一种方法来打印文本中的单词和单词行号不,不会的,现在你已经打破了
words=list(set(text)-set(dictset))
,正如我提到的,它依赖于
text
是单词而不是行(当然,这使得无法获得行号).我完全理解你想要什么,但这是我的家庭作业,如果我只给你正确的代码,这在道德上是错误的,尽管我花的时间比目前为止我花在这上面的时间要少得多。你必须自己想一想:你需要一个行列表,否则行号无法显示,那么你如何修复我的列表已经被分区过这么多次了?所以如果你说了一系列行,我必须从一开始就这么做吗?我该怎么做?text=lines.append()我已经做了2个月的编程,你会知道我会做多少。syntx是我的主要问题,我知道如何用英语做,但不知道多少语法,因为我的exp=2个月。如果我能看到它是如何做的,我打赌你会理解,但我不知道如何做,因为这是我一生中做的第一个程序