今天,我遇到了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()时需要注意的一个问题:
如果字典包含调用.get()中使用的键,且其值为None,则.get()方法将返回None,即使提供了默认值。
例如,下面返回None,而不是'alt_value',这可能是预期的:
d = {'key': None}
assert None is d.get('key', 'alt_value')
.get()的第二个值仅在提供的键不在字典中时才返回,而不是在该调用的返回值为None时才返回。
为什么dict.get(key)而不是dict[key]?
0. 总结
与dict[键]相比,dict。Get在查找键时提供一个回退值。
1. 定义
Get (key[, default])内置类型- Python 3.6.4rc1文档
如果key在字典中,则返回key的值,否则为default。如果没有给出default,则默认为None,因此该方法永远不会引发KeyError。
d = {"Name": "Harry", "Age": 17}
In [4]: d['gender']
KeyError: 'gender'
In [5]: d.get('gender', 'Not specified, please add it')
Out[5]: 'Not specified, please add it'
2. 问题解决了。
如果没有默认值,则必须编写繁琐的代码来处理此类异常。
def get_harry_info(key):
try:
return "{}".format(d[key])
except KeyError:
return 'Not specified, please add it'
In [9]: get_harry_info('Name')
Out[9]: 'Harry'
In [10]: get_harry_info('Gender')
Out[10]: 'Not specified, please add it'
作为一个方便的解决方案,dict。Get引入了一个可选的默认值,避免了上述杂乱的代码。
3.结论
字典Get有一个额外的默认值选项,用于在字典中缺少key时处理异常
这个函数的用途是什么?
一个特别的用法是用字典计数。让我们假设您想要计算给定列表中每个元素的出现次数。常见的方法是创建一个字典,其中键是元素,值是出现的次数。
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
它允许您提供一个默认值,而不是在没有找到该值时得到一个错误。像这样的劝说代码:
class dictionary():
def get(self,key,default):
if self[key] is not found :
return default
else:
return self[key]
在Python 3.8及以后版本中,字典get()方法可以与赋值表达式中的walrus操作符:=一起使用,以进一步减少代码:
if (name := dictonary.get("Name")) is not None
return name
使用[]而不是get()将需要将代码包装在try/except块中并捕获KeyError(未显示)。如果没有walrus操作符,您将需要另一行代码:
name = dictionary.get("Name")
if (name is not None)
return name