【问题标题】:Python return dictionary [closed]Python返回字典[关闭]
【发布时间】:2015-11-16 00:02:03
【问题描述】:

我正在尝试创建用户输入字典。该字典接受任何用户输入(例如“我喜欢馅饼”),并将列出每个值及其各自的索引。但是,我的 buildIndex 函数不会返回在函数中创建的字典。谁能提供一些关于为什么会发生这种情况的见解?

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

【问题讨论】:

  • 它不返回任何东西,或者返回你不期望的东西吗?你有什么错误吗?
  • 为什么要用 {} 覆盖 d?无论您传递给方法的 d 值如何,都会在您执行 d = {} 时立即被覆盖。
  • 另外,如果您可以举例说明您提供的典型输入是什么以及预期的输出是什么,这将有所帮助。我运行了你的代码,它确实返回了一个字典。
  • 您似乎有可能将d to 传递给您的函数,因为您认为这种情况类似于C 中处理数据结构的方式(它在将指针传递给函数,该函数旨在指向函数返回后的数据结构,这有点常见)。在 Python 中你不需要那种间接性。除非意图是修改而不是创建字典——从输入参数中删除 d
  • 我没有得到最接近的投票。他正在寻求洞察力,并且显然是 Python 的新手。这个问题既不是give-me-deh-codez 的情况,也不是明显超出范围——他向我们展示了他的尝试,等等。

标签: python dictionary return


【解决方案1】:

您似乎将其视为 C。这是可以理解的,但会使您的 Python 过于复杂。让我们只考虑几件事。

立即覆盖输入变量:

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

在 Python 中,我们不需要声明变量或为它们腾出空间。所以这更清楚地表示为:

def build_index(m):
    d = {}

(您注意到我从 functionName camelCase 更改为 underscore_naming ——这很常见。CamelCase 更常见于 Python 中的类名。)

使用显式迭代器变量:

Python 有一个 iterables 的概念。这意味着可以动态分配任何事物列表类型的对象:

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

变成:

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

甚至:

for word in m.split():
    # blahblah

在你的程序中间覆盖东西:

仔细考虑这部分的内容。在你的脑海中逐步完成它。

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

你的字典的目的是什么?建立字数?保留输入字符串中的位置字典? ……?!?事实上,这似乎并没有做任何特别有用的事情。即使是这样,为什么在某些地方有一个列表值而在其他地方有一个非列表整数值是可以的?选择一种类型并坚持下去——这会让事情变得更容易。

您要求洞察力,而不是让任何人为您做作业——非常酷。仔细考虑以上几点,以及read the docs on dictionaries(其中的一些函数对您有很大帮助——尤其是dict() 构造函数...)。

你离得并不远——只需要掌握一些 Python 习语。

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 2014-01-02
    • 1970-01-01
    • 2018-01-02
    • 2021-11-08
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多