今天,我遇到了 dict
方法 get
给定字典中的键,返回关联的值。
这个功能有什么用?如果我想在字典中找到与键关联的值,我可以做 dict[key]
,它返回相同的东西:
dictionary = {"Name": "Harry", "Age": 17}
dictionary["Name"]
dictionary.get("Name")
原文由 stensootla 发布,翻译遵循 CC BY-SA 4.0 许可协议
今天,我遇到了 dict
方法 get
给定字典中的键,返回关联的值。
这个功能有什么用?如果我想在字典中找到与键关联的值,我可以做 dict[key]
,它返回相同的东西:
dictionary = {"Name": "Harry", "Age": 17}
dictionary["Name"]
dictionary.get("Name")
原文由 stensootla 发布,翻译遵循 CC BY-SA 4.0 许可协议
什么是
dict.get()
方法?
如前所述, get
方法包含一个附加参数,用于指示缺失值。 从文档
> get(key[, default]) > > ``` > > 如果键在字典中,则返回键的值,否则返回默认值。如果未给出默认值,则默认为无,因此此方法永远不会引发 `KeyError` 。 一个例子可以是
d = {1:2,2:3} d[1] 2 d.get(1) 2 d.get(3) repr(d.get(3)) ‘None’ d.get(3,1) 1
> **任何地方都有速度改进吗?**
正如 [这里](https://wiki.python.org/moin/PythonSpeed/PerformanceTips) 提到的,
> 似乎这三种方法现在都表现出相似的性能(彼此相差大约 10% 以内),或多或少与单词列表的属性无关。
较早的 `get` 相当慢,但现在速度几乎相当,而且还具有返回默认值的额外优势。但是要清除我们所有的查询,我们可以在一个相当大的列表上进行测试(请注意,该测试仅包括查找所有有效键)
def getway(d): for i in range(100): s = d.get(i)
def lookup(d): for i in range(100): s = d[i]
现在使用 [`timeit`](https://docs.python.org/3/library/timeit.html) 对这两个函数进行计时
import timeit print(timeit.timeit(“getway({i:i for i in range(100)})”,“from main import getway”)) 20.2124660015 print(timeit.timeit(“lookup({i:i for i in range(100)})”,“from main import lookup”)) 16.16223979
正如我们所见,查找比获取更快,因为没有函数查找。这个可以通过 [`dis`](https://docs.python.org/3/library/dis.html) 看出来
def lookup(d,val): … return d[val] … def getway(d,val): … return d.get(val) … dis.dis(getway) 2 0 LOAD_FAST 0 (d) 3 LOAD_ATTR 0 (get) 6 LOAD_FAST 1 (val) 9 CALL_FUNCTION 1 12 RETURN_VALUE dis.dis(lookup) 2 0 LOAD_FAST 0 (d) 3 LOAD_FAST 1 (val) 6 BINARY_SUBSCR 7 RETURN_VALUE
> **它会用在什么地方?**
每当您想在查找字典时提供默认值时,它都会很有用。这减少了
if key in dic: val = dic[key] else: val = def_val
到单行, `val = dic.get(key,def_val)`
> **哪里会没用?**
每当您想返回 `KeyError` 说明特定密钥不可用时。返回默认值也会带来特定默认值也可能是键的风险!
> **是否有可能在 `dict['key']` 中具有 `get` 类的功能?**
是的!我们需要在字典子类中实现 [`__missing__`](https://docs.python.org/3/reference/datamodel.html#object.__missing__) 。
示例程序可以是
class MyDict(dict): def missing(self, key): return None
一个小的演示可以
my_d = MyDict({1:2,2:3}) my_d[1] 2 my_d[3] repr(my_d[3]) ‘None’
”`
原文由 Bhargav Rao 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
如果缺少键,它允许您提供默认值:
返回
default_value
(无论你选择什么),而会引发
KeyError
。如果省略,
default_value
是None
,这样返回
None
就像将。