为什么我得到';dict';没有属性';排序';Python中我的concordance程序出错
任务是编写一个程序,提示输入文件名,然后生成该文件的一致性。 一致性是一种按字母顺序排列的索引,显示文档中每个单词出现的行。例如,本段的一致性可能表现为:为什么我得到';dict';没有属性';排序';Python中我的concordance程序出错,python,python-2.7,Python,Python 2.7,任务是编写一个程序,提示输入文件名,然后生成该文件的一致性。 一致性是一种按字母顺序排列的索引,显示文档中每个单词出现的行。例如,本段的一致性可能表现为: Word Line Number a 1 1 2 alphabetical 1 an 1 appear 2 我在这里列了一个单子,这样我就可以把单词分类了 我有以下代码: f = open(raw_input("Enter a filename: "), "r"
Word Line Number
a 1 1 2
alphabetical 1
an 1
appear 2
我在这里列了一个单子,这样我就可以把单词分类了
我有以下代码:
f = open(raw_input("Enter a filename: "), "r")
myDict = {}
linenum = 0
for line in f:
line = line.strip()
line = line.lower()
line = line.split()
linenum += 1
for word in line:
word = word.strip()
word = word.lower()
myDict[word] = linenum
if word in myDict:
myDict.sort()
else:
myDict.append(word)
print "%-15s %-15s" %("Word", "Line Number")
print "%-15s %-15d" %(myDict.keys(), myDict.values())
当我现在运行程序时,它说“dict”没有“sort”属性。你能解释一下吗
该文件与示例相同,输出也应该是上面的示例。我对python非常陌生,请帮助:[你想让myDict只是一个列表吗?如果是这样,就声明它为myDict=[]。列表有排序和附加函数,但字典没有。我认为使用dict是有意义的,但你必须在添加到dict的每个值中添加一个键。例如:
>>> dict = {}
>>> dict["apple"] = "red"
>>> dict["banana"] = "yellow"
>>> dict
{'apple': 'red', 'banana': 'yellow'}
在本例中,键是“苹果”和“香蕉”,值是“红色”和“黄色”。由于这是家庭作业,我将让您为作业确定合适的键和值
此外,这一行也有问题:
for word in line:
行
是一个字符串,因此实际上您查看的是行
中的每个字符,而不是每个单词。您必须找到某种方法将行
转换为单词列表
最后,您的最终语句将只打印最后读取的单词。您正在生成一个dict,但您没有打印dict,您正在打印单个值。一旦生成dict,您应该打印dict本身
您走的是正确的道路,但对字典进行排序并不是处理多次出现的单词的正确方法(此外,dict没有排序方法,这就是为什么会出现错误的原因,但即使有,您也不需要它)。此外,一旦您将值分配给键,它就会添加到字典中,因此它已经被删除“附加”
在您的示例中,单词a出现了3次,输出列出了它出现的每一行,因此您需要一种方法来存储每个单词的行列表。您可以通过以下方式轻松排序词典的顺序:
f = open(raw_input("Enter a filename: "), "r")
myDict = {}
linenum = 0
for line in f:
line = line.strip()
line = line.lower()
line = line.split()
linenum += 1
for word in line:
word = word.strip()
word = word.lower()
if not word in myDict:
myDict[word] = []
myDict[word].append(linenum)
print "%-15s %-15s" %("Word", "Line Number")
for key in sorted(myDict):
print '%-15s: %-15d' % (key, myDict(key))
希望能有帮助
Jordi感谢您的修复。当我再次运行该程序时,它不会给出预期的输出并打印出完全不同的内容。@KimY啊,这是因为您的print语句现在只打印一个单数单词和一个单数linenum。您需要某种循环,在myDict的元素上迭代并打印每个line、 类似地,您希望myDict实际上是一个dict(声明为{}),而不是myDict[word].append(linenum)。您可能需要将该dict中的每个值初始化为myDict[word]=[]在你可以追加之前。谢谢。我已经解决了。如果你不想帮我更多的忙,我会理解的,我接受了你的答案,但是如果你不介意帮我一点忙,我会感到有些困惑:@KimY好吧,你正确地变换了行,你选择了一个好的键。我会在我的答案中说明其他内容。@KimY主要提示是”每个单词都需要一个行列表这可能是作业中最重要的部分,也是最不直观的部分。数组/dict值不一定必须是静态值…非常感谢!这花了你很长时间,直到你出现:@KimY不客气,只要确保你理解多维阵列的概念,它的意思就是它所说的。Python字典是无序的,
dict
类型没有排序方法。您可以调用dictionary对象上的.keys()
或.values()
(当然取决于您想要的值),并对结果进行排序。
f = open(raw_input("Enter a filename: "), "r")
myDict = {}
linenum = 0
for line in f:
line = line.strip()
line = line.lower()
line = line.split()
linenum += 1
for word in line:
word = word.strip()
word = word.lower()
if not word in myDict:
myDict[word] = []
myDict[word].append(linenum)
print "%-15s %-15s" %("Word", "Line Number")
for key in sorted(myDict):
print '%-15s: %-15d' % (key, myDict(key))