【31天蓝桥杯冲刺!】蓝桥杯相关的 Python 细节(1) 字典中 get 函数的用法和注意事项


码字不易,希望大家点赞支持一下

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()使用的体现

  • 以上就是今天的知识分享,如果对您有帮助的话请点赞支持一下,在刷题过程中遇到其他小知识我也会持续分享
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值