Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我得到';dict';没有属性';排序';Python中我的concordance程序出错_Python_Python 2.7 - Fatal编程技术网

为什么我得到';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))