2

我是一个新的 Python 程序员,我正在阅读字典的 .get 方法,所以我尝试自己使用它。我尝试了一些非常简单的代码:

h = dict()
h.get('a', 1)
print (h)

口译员只返回:

{}

我知道 .get 方法会在找不到您要求的键时返回您提供的默认值,但它实际上会在字典中创建一个新的键和存储桶吗?如果是这样,为什么我的代码不返回新项目?谢谢

4

4 回答 4

1

不,get如果不存在,则不会向 dict 添加条目。它不做任何修改。

>>> h = dict()
>>> h.get('a', 1)
1
>>> h
{}

[]从字典中读取时也是如此;它会为不存在的键引发错误。这与 C++ 不同,[]如果条目不存在,将在其中添加条目。

>>> h['a']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'a'
>>> h
{}

但是要知道 Python 可以区分读取和写入。分配给不存在的键将创建它,即使读取不存在的键会引发异常。

>>> h['a'] = 1
>>> h
{'a': 1}
于 2013-09-03T20:54:01.563 回答
0

h.get('a', 1)永远不会1插入h. 如果您想要一种在不存在任何值时插入默认值的方法,您需要setdefault

h = {}
h.setdefault('a', 1)
print h  # prints {'a': 1}
h.setdefault('a', 2)
print h  # still prints {'a': 1}
于 2013-09-03T20:52:22.513 回答
0

'a'键不存在,因此返回值1。这是该方法的行为get():该get方法将返回与键对应的值,或者您传递给它的第二个参数(在您的情况下为 1)。

如果您要设置'a'密钥,则行为会有所不同:

In [10]: h['a']=1

In [11]: h
Out[11]: {'a': 1}

In [12]: h.get('a',3)
Out[12]: 1

如果您需要更多信息,请参阅解释该方法如何工作的文档。get()

于 2013-09-03T20:52:38.477 回答
0

dictName.get()是一个类似于一个try...catch。如果该值不存在(通常会返回异常),它将在其位置返回另一个值。

h = {}
h.get('a', 1)
print h

h.get('a', 1)不执行操作h;它仅返回一个值,您可以(重新)分配给(另一个)变量或测试/打印等。

h = {}
print h.get('a', 1)

. . .will 返回1,因为h['a']不存在。然而。. .

h = {}
h['a'] = 0
print h.get('a', 1)

. . .will 返回0,因为h['a']确实存在。

于 2013-09-03T21:00:31.533 回答