3

タスクは、ファイル名の入力を求め、そのファイルのコンコーダンスを生成するプログラムを作成することです。元。コンコーダンスは、各単語が出現するドキュメント内の行を示すアルファベット順のインデックスです。たとえば、この段落の一致は次のように表示されます。

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がとても新しいので、助けてください:[

4

3 に答える 3

3

辞書を使用するのは理にかなっていると思いますが、辞書に追加する各値とともにキーを追加する必要があります。例えば:

>>> dict = {}
>>> dict["apple"] = "red"
>>> dict["banana"] = "yellow"
>>> dict
{'apple': 'red', 'banana': 'yellow'}

この例では、キーは「りんご」と「バナナ」で、値は「赤」と「黄」です。これは宿題なので、課題に適したキーと値を決定するのはあなたに任せます。

また、この行には問題があります。

for word in line:

lineは文字列なので、実際にlineは、各単語ではなく の各文字を見ています。line単語のリストに変換する方法を見つける必要があります...

最後に、最後のステートメントは最後に読んだ単語のみを出力します。あなたは辞書を作成していますが、辞書を印刷していません。単一の値を印刷しています。辞書を作成したら、辞書自体を印刷する必要があります。


myDict[word] = linenum

if word in myDict:
    myDict.sort()
else:
    myDict.append(word)

あなたは正しい道を進んでいますが、辞書の並べ替えは、複数回出現する単語を処理する正しい方法ではありません (さらに、dict には並べ替えメソッドがないため、エラーが発生しますが、もしそうなら、ここでは必要ありません)。また、キーに値を割り当てると、辞書に追加されるため、既に「追加」されています。

あなたの例では、単語aが 3 回表示され、出力にはそれが表示される各行がリストされるため、各単語の行のリストを保存する方法が必要になります。

于 2012-04-05T02:23:35.547 に答える
1

myDict を単なるリストにしたいですか? その場合は、myDict = [] として宣言します。リストにはソート機能と追加機能がありますが、辞書にはありません。

于 2012-04-05T01:46:36.587 に答える
1

この方法で辞書の順序を簡単に並べ替えることができます。

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))

ジョルディに役立つことを願っています

于 2012-04-05T18:41:22.537 に答える