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

2024-06-15 06:47:47 发布

您现在位置: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)

此代码输出:

^{pr2}$

我希望它输出:

^{3}$

Tags: 代码textinimportforreadstringsys
1条回答
网友
1楼 · 发布于 2024-06-15 06:47:47

text是一个单词的列表,它是而不是行的列表。当您这样做时:

text = infile.split()

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

^{pr2}$

这是个谎言:^{的条目是单词不是行。如果不是的话,那么下面这一行:

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

将完全被破坏这依赖于text的项目是单词,而不是行。在

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

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

text现在与words中的最后一个项目绑定在一起,您已经销毁了它以前拥有的任何其他值。在

建议一:停止将标识符用于许多不同的、不兼容的目的。对你自己做出承诺,在你的任何一个程序中,没有一个标识符会被绑定到两个不同的东西上。这至少可以减少你管理者在这么少的几行代码上造成的令人难以置信的混乱。在

相关问题 更多 >