今天,我遇到了dict方法get,它在字典中给定一个键,返回相关的值。
这个函数的用途是什么?如果我想在字典中找到一个与键相关的值,我可以只做dict[key],它返回相同的东西:
dictionary = {"Name": "Harry", "Age": 17}
dictionary["Name"]
dictionary.get("Name")
今天,我遇到了dict方法get,它在字典中给定一个键,返回相关的值。
这个函数的用途是什么?如果我想在字典中找到一个与键相关的值,我可以只做dict[key],它返回相同的东西:
dictionary = {"Name": "Harry", "Age": 17}
dictionary["Name"]
dictionary.get("Name")
当前回答
这样做的目的是,如果没有找到键,您可以给出一个默认值,这非常有用
dictionary.get("Name",'harry')
其他回答
Get接受第二个可选值。如果指定的键在您的字典中不存在,则将返回此值。
dictionary = {"Name": "Harry", "Age": 17}
dictionary.get('Year', 'No available data')
>> 'No available data'
如果不提供第二个参数,则返回None。
如果使用dictionary['Year']中的索引,则不存在键将引发KeyError。
使用.get()时需要注意的一个问题:
如果字典包含调用.get()中使用的键,且其值为None,则.get()方法将返回None,即使提供了默认值。
例如,下面返回None,而不是'alt_value',这可能是预期的:
d = {'key': None}
assert None is d.get('key', 'alt_value')
.get()的第二个值仅在提供的键不在字典中时才返回,而不是在该调用的返回值为None时才返回。
这个函数的用途是什么?
一个特别的用法是用字典计数。让我们假设您想要计算给定列表中每个元素的出现次数。常见的方法是创建一个字典,其中键是元素,值是出现的次数。
fruits = ['apple', 'banana', 'peach', 'apple', 'pear']
d = {}
for fruit in fruits:
if fruit not in d:
d[fruit] = 0
d[fruit] += 1
使用.get()方法,你可以使这段代码更紧凑和清晰:
for fruit in fruits:
d[fruit] = d.get(fruit, 0) + 1
它允许你在缺少键时提供一个默认值:
dictionary.get("bogus", default_value)
返回default_value(不管你选择它是什么),而
dictionary["bogus"]
会引发一个KeyError。
如果省略,default_value为None,这样
dictionary.get("bogus") # <-- No default specified -- defaults to None
返回None
dictionary.get("bogus", None)
会。
简短的回答
方括号用于条件查找,当缺少键时,条件查找可能会失败并返回KeyError。
get()方法用于无条件查找,这种查找永远不会失败,因为已经提供了默认值。
基本方法和辅助方法
方括号调用__getitem__方法,这是字典等映射的基础。
get()方法是在该功能之上分层的帮助器。它是通用编码模式的捷径:
try:
v = d[k]
except KeyError:
v = default_value