码字不易,希望大家点赞支持一下
1.描述
Python 字典(Dictionary) get() 函数返回指定键的值。
1.1 为什么要使用get()函数?
-
常规访问字典的方法是:dict[key] ,但是在 key(键)不在字典中时,会触发 KeyError 异常。
-
get(key) 方法在 key(键不在字典中时,可以返回默认值 None 或者设置的默认值。
2. 语法
get()方法语法:
dict.get(key[, value])
- key – 字典中要查找的键。
- value – 可选,如果指定键的值不存在时,返回该默认值。
3.用法
3.1 访问字典
首先就是可以去访问字典里的内容,如果字典中不存在这个键,就返回默认值None或者设置的默认值
(说人话就是字典里有我就直接访问它的内容,没有的话我就给它设置一个默认值)
# 建立一个字典
dict1 = {'school': '清华', 'age':18}
print(dict1.get('school', '无'))
print(dict1.get('name', '无')) # 设置默认值
print(dict1.get('name')) # 不设置默认值,则默认值为None
输出结果:
清华
无
None
3.2 统计列表中元素出现次数
这个用法是我在刷 力扣 349. 两个数组的交集 中用到的,这道题可以用哈希表的方法去解决,其中用到了这个知识点。
力扣349. 两个数组的交集
比如说我有一个数组:
nums1 = [1, 2, 2, 5, 1, 3]
我想去统计其中每个元素出现的次数,就可以用如下的代码来解决
# 建立一个空字典
table = {}
for num in nums1:
table[num] = table.get(num, 0) + 1
print(table)
输出结果:
{1: 2, 2: 2, 5: 1, 3: 1}
- 上述代码:用get去访问的时候,发现没有这个key,那么get函数就创建这个key,并给他赋一个我设置好的默认值
- 我发现举例子的话用数字来可能看着有点眼花缭乱,下面用字符串再举一个例子:
ls = ['a','a','b','a','cc','ddd']
ls = ['a','a','b','a','cc','ddd']
table = {}
for i in ls:
table[i] = table.get(i, 0) + 1
print(table)
输出结果:
{'a': 3, 'b': 1, 'cc': 1, 'ddd': 1}
- 首先去遍历列表ls里的所有元素
- 当在遍历列表ls中的第一个元素 ‘a’ 的时候,在这里 table[i] = table.get(i, 0) + 1 的意思是:先为 ’a‘ 赋初值为0,然后再加1
- 原理其实就是 get 函数在列表中没有找到要赋值的键,所以直接返回默认值None,我们就可以利用这个特性,把默认值设置为0,然后加1(相当于出现了一次),就可以实现一个统计元素出现次数的效果
- 大家可以把 get()中的默认值更改一下看看会发生什么 ,比如更改为 10
ls = ['a','a','b','a','cc','ddd']
table = {}
for i in ls:
table[i] = table.get(i, 10) + 1
print(table)
输出就变成:
{'a': 13, 'b': 11, 'cc': 11, 'ddd': 11}
这个时候默认值是从10开始
-
p.s: 其实我觉得掌握到这里就够用了,但是我在学习get()函数的时候还发现一个需要注意的地方,也许刷题用不到,但是是一个很有意思的特性,来自百万雨博主的 python字典中get()函数的用法个人小结
-
get()函数在作为键赋值语句时只有第一次是有效的,(比如get()函数在第一次对’a’这个键使用get赋值语句后下次再使用get赋值语句时键的值仍为第一次赋值运算后的结果),以下为测试代码:
ls = ['a','a','b','a','cc','ddd']
table = {}
for i in ls:
table[i] = table.get(i, 0) + 1
table['a'] = table.get('a',10) #功能同前一条代码执行到第二次时的
print(table)
输出:
{'a': 3, 'b': 1, 'cc': 1, 'ddd': 1}
大家可以发现,在我们循环外单独去在字典中调用get的时候,默认值并没有改变为10,这是因为作为 ‘a’ 的键此时已经存在字典当中了,所以就不涉及到查找不到而返回默认值的情况了,
这个时候的get()函数功能仅仅为访问这个key中的value
例题:力扣454.四数相加2
四数相加2 <======原题链接
- 第一种方法使用了字典去建立一个哈希表,去统计前两个数组中元素之和的次数,大家可以看到是用了
if…else…的方法为字典添加key和value实现一个统计的功能, - 这里我们也可以直接使用get()函数去进行统计
class Solution(object):
def fourSumCount(self, nums1, nums2, nums3, nums4):
# 使用字典存储nums1和nums2中的元素及其和
hashmap = dict()
for n1 in nums1:
for n2 in nums2:
if n1 + n2 in hashmap:
hashmap[n1+n2] += 1
else:
hashmap[n1+n2] = 1
# 如果 -(n1+n2) 存在于nums3和nums4, 存入结果
count = 0
for n3 in nums3:
for n4 in nums4:
key = - n3 - n4
if key in hashmap:
count += hashmap[key]
return count
- 使用get()去统计:
class Solution(object):
def fourSumCount(self, nums1, nums2, nums3, nums4):
# 使用字典存储nums1和nums2中的元素及其和
hashmap = dict()
for n1 in nums1:
for n2 in nums2:
hashmap[n1+n2] = hashmap.get(n1+n2, 0) + 1
# 如果 -(n1+n2) 存在于nums3和nums4, 存入结果
count = 0
for n3 in nums3:
for n4 in nums4:
key = - n3 - n4
if key in hashmap:
count += hashmap[key]
return count
这个例题就是对get()使用的体现
- 以上就是今天的知识分享,如果对您有帮助的话请点赞支持一下,在刷题过程中遇到其他小知识我也会持续分享