“阅读字典方法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/