2013-07-13 51 views
0

我正在嘗試創建一個非常基本的逆指數。即逆指數理解

函數inverseIndex應該輸入逗號分隔的字符串,然後返回它們所屬的文檔的索引集合。 如:inverseIndex("Hi Dude","Dude","ok Dude") ==>{"Hi":{0}, "Dude":{0,1,2},"ok",{3}}

當我從Java是 - 使用Javascript的背景下,我寫的是這樣的Python沒有理解:

def inverseIndex(strlist): 

    strDict = {} 
    listOfStrings = list(enumerate(strlist)) 

    allKeyWords = set(sum([y.split() for (x,y) in listOfStrings],[])) 

    strDict = {}; 
    for i in allKeyWords : 
     setStr = set(); 
     for j in listOfStrings: 
      if(j[1].find(i)): 
       setStr.add(j[0]) 
     strDict[i] = setStr; 

    return strDict 

這裏的東西我想:

strDict = {} 
    listOfStrings = list(enumerate(strlist)) 

    # get all the key words segregated in a set so we dont have duplicates. 
    allKeyWords = set(sum([y.split() for (x, y) in listOfStrings], [])) 

    print(allKeyWords) 

    return {x: y for x in allKeyWords for (y, z) in listOfStrings if z.find(x) != -1} 

這看起來工作正常。但是,我無法用理解書寫它。

此外,我正在尋找一種不使用itertools的方法,如果有的話。

+0

您沒有使用'itertools'。另外,你有什麼嘗試使用理解? – Marcin

+0

我已經試過這樣: 'strDict = {} listOfStrings =列表(枚舉(strlist)) #獲取所有關鍵詞的設置,所以我們不要有重複的分離。 (allKeywords) return {x:y for allKeyWords for(x,y)for(y,z)(allKeywords)在listOfStrings如果z.find(X)!= -1}' 但正在發生的事情是,這是獲得創建越來越replaced.Also設定的,我不希望使用itertools呢。 – abhididdigi

+0

更新你的問題。 – Marcin

回答

2

我認爲這是你在找什麼:

SCRIPT:

strings = ["Hi Dude", "Dude", "ok Dude"] 
dictionary = {} 
for i, item in enumerate(strings): 
    for word in item.split(): 
     try: 
      dictionary[word].append(i) 
     except KeyError: 
      dictionary[word] = [i] 

DEMO:

print(dictionary) 
# {'Dude': [0, 1, 2], 'Hi': [0], 'ok': [2]} 
+1

感謝彼得的幫助! – abhididdigi

+0

不幸的是,這不能在理解方法中完成,因爲您必須檢查當前正在創建的字典中是否有鍵。考慮改用我的方法,這對於這個問題更加pythonic。無論如何,如果你認爲@abhididdigi我的回答很有幫助,請不要猶豫,接受它! –