一日一技:让你的字典读取不报错

简介: 一日一技:让你的字典读取不报错

摄影:产品经理厨师:kingname

我们知道,读取 Python 字典时,如果某个 Key 不存在,Python 就会报错,如下图所示:

为了防止它报错,我们可以使用.get()方法:


但每次都要写.get()稍显麻烦。于是我们可以通过自己实现一个自定义的字典对象,来解决这个问题。

我们自定义一个类,继承dict,然后实现它的__missing__方法:

class OurDict(dict):
    def __missing__(self, key):
        returnNone
a = OurDict({'a': 1, 'b': 2})
print(a['x'])

运行效果如下图所示:

只要这个 Key 不存在,就会返回 None

在 Python 的collections工具模块中,有一个defaultdict实现了类似的事情。我们看它的使用方法。

from collections import defaultdict
a = defaultdict(str)
a['a'] = 1
a['b'] = 2
print(a)
print(a['x'])
print(a)

a = defaultdict(str)接收一个函数,让a变量成为一个defaultdict类型的对象,它可以像普通字典一样被赋值和读取。

但是当你读取一个不存在的 key 时,它会自动生成一个默认值,并把默认值和这个 key 插入到字典中。这个默认值取决于你在defaultdict传入的参数。如果传入的是str那么默认值就是空字符串,如果是int那么默认值就是0.当然你也可以传入自定义的一个函数,从而控制这个默认值。例如我自定义一个函数,用于返回当前的时间,运行效果如下图所示:

当插入的 key 不存在时,就自动以当前时间作为默认值,并存入到字典中。


目录
相关文章
leetcode-913:猫和老鼠
leetcode-913:猫和老鼠
170 1
|
存储 弹性计算 固态存储
三分钟磁盘存储性能IOPS、I/O及吞吐量指标详解
什么是磁盘I/O?存储IOPS是什么?磁盘性能指标吞吐量是指什么?
17452 39
|
算法 Java 调度
【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)
【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)
277 0
HTML基础之创建简单表格
HTML基础之创建简单表格
258 0
HTML基础之创建简单表格
|
对象存储 CDN 数据安全/隐私保护
|
11天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1239 5
|
10天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1219 87