猿问

为什么要得到(键)而不是迪克[键]?

为什么要得到(键)而不是迪克[键]?

今天,我遇到了dict方法get其中,给定字典中的一个键,则返回关联的值。

这个函数的用途是什么?如果我想在字典中找到一个与键相关的值,我可以这样做。dict[key],并返回相同的内容:

dictionary = {"Name": "Harry", "Age": 17}dictionary["Name"]dictionary.get("Name")


函数式编程
浏览 384回答 3
3回答

ITMISS

它允许您在缺少键时提供默认值:dictionary.get("bogus",&nbsp;default_value)回报default_value(无论你选择它是什么)dictionary["bogus"]会引起KeyError.如果省略,default_value是None,以至于dictionary.get("bogus")&nbsp;&nbsp;#&nbsp;<--&nbsp;No&nbsp;default&nbsp;specified&nbsp;--&nbsp;defaults&nbsp;to&nbsp;None回报None就像dictionary.get("bogus",&nbsp;None)会的。

米琪卡哇伊

什么是dict.get()方法?如前所述,get方法包含一个指示缺失值的附加参数。从文件中get(key[,&nbsp;default])如果键在字典中,则返回键的值,否则为默认值。如果未给出默认值,则默认为None,因此方法永远不会引发KeyError.一个例子可以是>>>&nbsp;d&nbsp;=&nbsp;{1:2,2:3}>>>&nbsp;d[1]2>>>&nbsp;d.get(1)2>>>&nbsp;d.get(3)>>>&nbsp;repr(d.get(3))'None'>>>&nbsp;d.get(3,1)1有速度提高吗?如前所述这里,现在看来,这三种方法都表现出了相似的性能(在彼此约10%的范围内),或多或少独立于单词列表的属性。更早get虽然速度要慢得多,但是现在的速度几乎可以与返回默认值的额外优势相媲美。但是为了清除所有的查询,我们可以在一个相当大的列表上进行测试(注意,测试只包括查找所有有效的键)。def&nbsp;getway(d): &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(100): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;d.get(i)def&nbsp;lookup(d): &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(100): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;d[i]现在,使用以下方法对这两个函数进行计时timeit>>>&nbsp;import&nbsp;timeit>>>&nbsp;print(timeit.timeit("getway({i:i&nbsp;for&nbsp;i&nbsp;in&nbsp;range(100)})","from&nbsp;__main__&nbsp;import&nbsp;getway"))20.2124660015 >>>&nbsp;print(timeit.timeit("lookup({i:i&nbsp;for&nbsp;i&nbsp;in&nbsp;range(100)})","from&nbsp;__main__&nbsp;import&nbsp;lookup"))16.16223979如我们所见,查找比GET更快,因为没有函数查找。这可以通过dis>>>&nbsp;def&nbsp;lookup(d,val):...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;d[val]...&nbsp;>>>&nbsp;def&nbsp;getway(d,val):...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;d.get(val)...&nbsp;>>>&nbsp;dis.dis(getway) &nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;LOAD_FAST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;(d) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;LOAD_ATTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;(get) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;LOAD_FAST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;(val) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;CALL_FUNCTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;RETURN_VALUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; >>>&nbsp;dis.dis(lookup) &nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;LOAD_FAST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;(d) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;LOAD_FAST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;(val) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;BINARY_SUBSCR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;RETURN_VALUE它在哪里有用?每当您想要在查找字典时提供默认值时,它将非常有用。这减少了&nbsp;if&nbsp;key&nbsp;in&nbsp;dic: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;=&nbsp;key[dic] &nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;=&nbsp;def_val一字一句,val = dic.get(key,def_val)在哪里没有用呢?当您想返回KeyError声明特定密钥不可用。返回默认值也有风险,即一个特定的默认值也可能是一个键!有没有可能get类特征dict['key']?是!我们需要实现__missing__在迪克特子类中。示例程序可以是class&nbsp;MyDict(dict): &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__missing__(self,&nbsp;key): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;None一个小小的示范可以是>>>&nbsp;my_d&nbsp;=&nbsp;MyDict({1:2,2:3})>>>&nbsp;my_d[1]2>>>&nbsp;my_d[3]>>>&nbsp;repr(my_d[3])'None'

catspeake

get接受第二个可选值。如果字典中不存在指定的键,则将返回此值。dictionary&nbsp;=&nbsp;{"Name":&nbsp;"Harry",&nbsp;"Age":&nbsp;17}dictionary.get('Year',&nbsp;'No&nbsp;available&nbsp;data')>>&nbsp;'No&nbsp;available&nbsp;data'如果不给出第二个参数,None会被归还。如果使用索引,如dictionary['Year'],不存在的键将引发KeyError.
随时随地看视频慕课网APP

相关分类

Python
我要回答