2016-11-20 2 views
0

私の宿題は、テキストファイルから関数lineIndexの索引語を取り、テキストファイルの各単語の行番号のリストを返すことです。出力全体を辞書に戻す必要があります。例えばテキストファイルの行番号で単語を索引する

ここでは、それがテキストファイルであるものである:

I have no pride 
I have no shame 
You gotta make it rain 
Make it rain rain rain` 

私の教授は、出力は次のようになりたい:例えば

{'rain': [2, 3], 'gotta': [2], 'make': [2], 'it': [2, 3], 'shame': [1], 'I': [0, 1], 'You': [2], 'have': [0, 1], 'no': [0, 1], 'Make': [3], 'pride': [0]} 

:単語「雨」をしていますライン#2とライン#3。 (最初の行は常にゼロから始まります)

ここまでは私のコードですが、このためのアルゴリズムが必要です。

def lineIndex(fName): 
    d = {} 
    with open(fName, 'r') as f:  

     #algorithm goes here 

print(lineIndex('index.txt')) 
+0

defaultdict(セット)が便利ここに記載されています「コレクションからdefaultdictをインポートするには、」反復処理する方法を調べることから始め – salparadise

+0

ファイル内の行 – danielunderwood

答えて

1

私の最初の時間が、これは動作します:

def lineIndex(fName): 
    d = {} 
    with open(fName, 'r') as f:  
     content = f.readlines() 
     lnc = 0 
     result = {} 
     for line in content: 
      line = line.rstrip() 
      words = line.split(" ") 
      for word in words: 
       tmp = result.get(word) 
       if tmp is None: 
        result[word] = [] 
       if lnc not in result[word]: 
        result[word].append(lnc) 

      lnc = lnc + 1 

     return result 

print(lineIndex('index.txt')) 
+0

ありがとう! Pythonを初めて使用した後、あなたが実際に何か正しいことを書いたことを誇りに思います!これは正しいです。私が最初にコンピュータ言語を学んだとき、私はそんなに苦労しました。 – Jorgan

0

ここでは、この

def lineIndex(fName): 
    dic = {} 
    i=0 
    with open(fName, 'r') as f:  
     while True: 
      x=f.readline() 
      if not x: 
       break 
      i+=1 
      for j in x: 
       if j in dic: 
        dic[j].add(i) 
       else: 
        dic[j]=set() 
        dic[j].add(i) 
    print (dic) 

print (lineIndex("index.txt")) 
0

はセットを使用して簡単な方法ですしてみてください、私はあなたのファイルでそれを行う方法についての演習を行います。

Pythonで何かを書い
In [14]: text = """I have no pride 
    ...: I have no shame 
    ...: You gotta make it rain 
    ...: Make it rain rain rain""" 

In [15]: 

In [15]: from collections import defaultdict 

In [16]: d = defaultdict(set) 

In [17]: for i, line in enumerate(text.split('\n')): 
    ...:  for each_word in line.split(' '): 
    ...:   d[each_word].add(i) 
    ...: 
    ...: 

In [18]: d 
Out[18]: 
defaultdict(set, 
      {'I': {0, 1}, 
      'Make': {3}, 
      'You': {2}, 
      'gotta': {2}, 
      'have': {0, 1}, 
      'it': {2, 3}, 
      'make': {2}, 
      'no': {0, 1}, 
      'pride': {0}, 
      'rain': {2, 3}, 
      'shame': {1}}) 
関連する問題