python - Thinkpython 练习让我对方法感到困惑(练习 11.2)

标签 python methods

“阅读字典方法setdefault的文档并使用它编写更简洁的invert_dict版本”

看似简单的练习。但这让我对 python 中方法的交互感到困惑。

解决办法是:

    inverse = dict()
    for key in d:
        val = d[key]
        inverse.setdefault(val, []).append(key)
    return inverse

文档指出:

setdefault(key[, default]) If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.

果然,当我在字典上测试它时,它会返回键的值(如果它已经在列表中)。 但是 .append() 如何改变字典中的列表呢?如果键在字典中,则 setdefault 返回其值,在本例中是一个列表。 append 方法适用于列表,但它如何引用字典中的列表呢?

最佳答案

setdefault() 方法返回具有指定键的项目的值。例如:

x = { 'car': 'ford'}
y = x.setdefault('car', 'toyota')
z = x.setdefault('color', 'black')
print(y, z)
# ford black

由于 dict 中设置的值是一个列表,因此这就是返回的内容,此时可以对其调用 append

您必须小心,如果原始值或新值不是列表,则可能会引发异常。例如:

x = { 'people': 10 }
x.setdefault('people', []).append('bob')
# AttributeError: 'int' object has no attribute 'append'

关于python - Thinkpython 练习让我对方法感到困惑(练习 11.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70500319/

相关文章:

Python Colormap 用于显示高值范围内的差异

android - “main cannot be resolved or is not a field”

jquery - 使用magicSuggest插件时如何手动获取Value?

methods - 重命名类型后,我无法访问其某些方法

python - 在 Keras 中对具有不同分辨率的图像进行训练和验证

python - 如何使用 Fabric 处理部署到具有多个应用程序服务器的单个主机?

python - 在项目本地安装 Python 依赖

Python functools 部分效率

java - 从类方法显示类对象

Java和junit : derivative of polynomial method testing issue