2015-11-16 131 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成语。