2015-11-16 127 views
-2

我正在嘗試創建用戶輸入字典。這個字典接受任何用戶輸入(例如「我喜歡餡餅」),並將用各自的索引列出每個值。但是,我的buildIndex函數不會返回在該函數內創建的字典。任何人都可以提供一些見解,爲什麼這可能會發生?Python返回字典

d = {} 
def buildIndex(m): 
    m = m.lower() 
    words = m.split() 
    i = 0 
    while i < len(words): 
     nextWord = words[i] 
     if nextWord in d: 
      ref = [d[nextWord]] 
      ref.append(i) 
      d[nextWord] = ref 
     else: 
      d[nextWord] = i 
     i += 1 
    return d 
+1

它不會返回任何東西,或者返回您不期望的東西嗎?你有什麼錯誤嗎? – Undo

+3

你爲什麼用{}覆蓋d?無論您傳遞給您的方法的「d」值是否會在您執行'd = {}'時立即被覆蓋。 – idjaw

+5

此外,如果您可以舉例說明您正在提供什麼樣的典型輸入以及預期輸出是什麼,這將有所幫助。我運行了你的代碼,它確實返回了一個字典。 – idjaw

回答

1

你似乎接近這好像是C.這是可以理解的,但過於複雜的Python。讓我們考慮一些事情。

改寫輸入變量立即

def buildIndex(m, d): 
    d = {} 

在Python我們並不需要聲明變量或騰出空間給他們。

def build_index(m): 
    d = {} 

(你注意到我從functionName駝峯改爲underscore_naming - 這是很常見的駝峯更常見的是在Python類的名字。)

使用:那麼,因爲這是更明確地表達一個明確的迭代器變量:

Python有一個概念迭代器。這意味着列表中,事情的任何類型的對象可以動態分配:

while i < len(words): 
    nextWord = words[i] 

變爲:

for word in words: 
    if word in d: 
     # etc... 

甚至:

for word in m.split(): 
    # blahblah 

在中間重寫的東西你的程序:

仔細考慮一下t他的部分在做。在你的腦海中穿過它。

if nextWord in d: 
    ref = [d[nextWord]] 
    ref.append(i) 
    d[nextWord] = ref 
else: 
    d[nextWord] = i 

你的字典有什麼用途?建立一個字數?保留輸入字符串中的位置字典? ...?!?事實上,這似乎沒有做任何特別有用的事情。即使這樣做了,爲什麼在某些地方有一個列表值並且在其他地方有一個非列表整數值是可以的?選擇一個類型並堅持下去 - 這會讓事情變得更容易。

你要求瞭解,而不是任何人爲你做功課 - 非常酷。仔細考慮以上幾點,並且read the docs on dictionaries(那裏有功能會幫助你很多 - 特別是dict()構造函數...)。

你不是太遙遠 - 只需要得到一些Python成語。