Python 字典的 get() 方法和 [key] 方法对比

Python 字典是一个基础的知识点了,在我们想要获取字典中的值的时候一般会有两种可选的方法——get() 方法和 [key] 方法今天我来尝试简单对比一下两种方法。

dic.get() 方法和 dic[key] 方法的不同

这两种方法都是用来获取字典中 key 对应的 value,一般情况下似乎没有什么区别:

>>> dic = {1:'This is 1', 2:'This is 2'}
>>> dic[1]
'This is 1'
>>> dic.get(2)
'This is 2'

不过在实际编写程序的时候,我们有时候并不知道字典中有哪些 key ,这种时候两种方法的区别就不同了:

>>> dic[0]
# 由于我们刚刚创建的字典里面没有 0 这个 key 因此我们得到了一个错误
KeyError: 0

>>> dic.get(0)
# 好吧这里什么也没得到

这里就很重要了,如果大家和馆主我一样也是编程小白就需要注意一下了,因为如果程序中抛出了任何 Error 就意味着一件件事情,我们的程序要停止运行了。这在正式程序中是大家都不愿意看到的。
但是我们也看到, get() 方法在遇到错误的时候没有给我们任何反馈,也许你觉得这样不好,其实原因是我们省略了一个参数,我们可以增加第二个参数指定 get() 方法在遇到错误的时候返回一些信息:

>>> dic.get(0,'抱歉你请求的 key 不存在')
>'抱歉你请求的 key 不存在'

好啦,馆主我又一次用了大量篇幅(废话太多)表达了一句话:
get() 方法和 [key] 方法的主要区别在于,[key] 在遇到不存在的 key 时会抛出 KeyError 错误

两种方法在速度上有什么区别?

由于馆主爱好纠结于速度的问题,嗯~,接下来就是我们没什么技术含量的简单测试了。
我们首先构造一个字典,然后测试两种方法花费的时间。

from datetime import datetime

# 构建字典
dic = {i: 'This is ' + str(i) for i in range(1, 101)}

#创建使用不同方法的两个函数
def test_get(dic):
    for i in range(100):
        try:
            dic.get(i)
        except:
            pass

def test_key(dic):
    for i in range(100):
        try:
            dic[i]
        except:
            pass

# 计算运行 10000 次消耗的时间
t1 = datetime.now()
for i in range(10000):
    test_get(dic)
t2 = datetime.now()
time = t2 - t1
print('get方法用时:')
print(time.total_seconds())

t1 = datetime.now()
for i in range(10000):
    test_key(dic)
t2 = datetime.now()
time = t2 - t1
print('[key]方法用时:')
print(time.total_seconds())

我的测试结果来看,get() 方法要慢一些,但是差距不大。

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值