2016-11-20 47 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

我第一次用Python寫的東西,但這個工程:

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

下面是使用套一個簡單的方法,我會給你如何與文件做練習。

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