使用setdefault方法处理字典缺失值

Python字典方法实战指南:从安全读取到高并发原子操作 字典是Python最常用的数据结构,其核心价值远超键值对容器的表层认知。理解get()、setdefault()、update()、pop()等方法的底层哈希表原理,是保障高并发、低延迟与内存可控的关键。这些方法本质是内存操作的原子化封装:get()实现零副作用安全读取,setdefault()提供线程安全的懒初始化,update()和|=运算符决定批量操作的内存效率,pop()则支撑分布式状态变更的原子性。在实时日志聚合、嵌套配置解析、轻量规则引擎等生产场景中,方法选型错误会导致QPS骤降、CPU尖峰或缓 阅读详情

在处理字典集合的时候经常会去访问字典的键,由于场景有很多种比如有时候访问的字典键并不存在,那么如何很好的处理缺失值呢,这里要提到的就是字典的**setdefault()**方法,setdefault()方法其实也类似于字典里的get()方法。

get()方法会判断字典的键是否存在,如果存在则返回值否则不做任何返回也不会导致任何异常,当然用get(key, default=None)其实也可以设定默认值,一旦设置了默认值,那么在没有找到键的情况就返回设定的默认值。

而用setdefault()方法直接访问字典键会返回对应键值,但是当键不存在的时候,新的键会在字典中被添加进字典中,并且默认设置为None值,这就是与get()的唯一不同之处。

test = {'name':"anders"}
test.setdefault('name')

# 输出如下:
# 'anders'

test = {'name':"anders"}
test.setdefault('age')
print(test)

# 输出如下:
# {'name': 'anders', 'age': None}

setdefault的方法语法是dict.setdefault(key, default=None),所以自然可以在使用setdefault()方法时设定默认值,如果本身就存在对应的键那就返回原有键的值,否则就会添加我们设置的字典新键和键值。

test = {'name':"anders"}
# 我们试着用setdefault方法访问name键,并附带mary键值。
test.setdefault('name', 'mary')
print(test)

# 输出如下:
# {'name': 'anders'}

因为我们本身在该字典中存在name键所以依然返回原有的键的值内容为anders。

对于所设定的默认值,不仅仅是一种单类型,我们还可以设置一个list列表。

test = {'name':"anders"}
# 我们给默认值设置为[]列表,随后使用列表的append方法添加列表值。
test.setdefault('nickname', []).append('apple')
test.setdefault('nickname', []).append('orange')
print(test)

# 输出如下:
# {'name': 'anders', 'nickname': ['apple', 'orange']}

甚至也可以将默认值设置为dict字典类型。

test = {'name':"anders"}
# 我们给默认值设置为{}字典,随后使用比较特殊的方式[] = ""的方式定义。
test.setdefault('nickname', {})["name1"] = "apple"
test.setdefault('nickname', {})["name2"] = "orange"
print(test)

# 输出如下:
# {'name': 'anders', 'nickname': {'name1': 'apple', 'name2': 'orange'}}

在将默认值设定为字典类型的时候写法有些稍许注意的是定义方式以类似**[“name1”] = “apple”**这样的方式添加新值。

在平时编码环境中set default()方法的作用还是非常有用的,比如下面这个例子是用来遍历当前存在的字典列表,如果不存在就添加进去,顺便把键值按照顺序数值来分配。遇到这种情况时就可以考虑使用setdefault()方法了。

dict_strings = {'puppy': 1, 'kitten': 2, 'doggy':3, 'weasel':4}

strings = ('puppy', 'kitten', 'doggy', 'weasel',
           'anderson', 'jason')

count = 1
for kw in strings:
    # setdefault的默认值设置为循环的次数,当提取的字典键不存在的时候把当前的count值设置为默认值。
    dict_strings.setdefault(kw, count)
    # count变量用于计算当前循环键的次数
    count = count + 1
    
print(dict_strings)

# 输出如下:
# {'puppy': 1, 'kitten': 2, 'doggy': 3, 'weasel': 4, 'anderson': 5, 'jason': 6}
Python KeyError本质与工业级防御实战指南 KeyError并非简单的键不存在异常,而是数据契约断裂的信号灯。其根源在于CPython字典哈希表探查机制——当所有槽位确认无匹配键时才触发,性能开销远超dict.get()。在Web API开发、JSON嵌套解析、配置管理及缓存系统中,未处理的KeyError极易引发5xx错误、数据污染甚至服务雪崩。结合Pydantic Schema校验、deep_get安全访问、白名单字段过滤与结构化溯源监控,可构建覆盖开发、测试、上线全链路的防御体系。本文聚焦Python字典底层原理与高并发场景下的KeyError 阅读详情

相关推荐

Python字典的setdefault()方法详解

setdefault()方法是Python字典提供的一个便捷方法,用于获取字典中指定键的值,并在该键不存在时添加该键及默认值。通过本文的介绍,你应该对setdefault()方法有了更深入的理解,并能够在实际的开发中灵活运用。无论是获取已存在的键的值,还是添加新的键值对,setdefault()方法都能帮助我们简化代码并提高效率。希望本文能对你理解和使用Python字典的setdefault()方法有所帮助!如有更多疑问,欢迎继续提问。

PixelShadeZ的博客 1350

python字典缺失值的处理,五种方式:defaultdict,dict.get,Counter,__missing__

在Python中字典是使用得非常频繁的一个数据结构,但是很多从其他语言转学python的朋友或是Python的初学者在使用字典的时候还是以原来语言的思维,不够pythonnic,没有体现出python语言的特性,下面我总结了一些常用场景可以让你的代码更加的"python" ...

lclkkking的博客 2470

Python 字典的内置方法 setdefault()

setdefault()方法   本文简单介绍 Python 中字典的内置方法setdefault() 目录setdefault()方法描述语法参数实例 如果你不吃别人家的饭,就别太把别人的话放在心上。—— 苏岑 描述   Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。   get() 和 setdefault() 区别: setdefault() 返回的键如果不在字典中,会添加键(更新字典),而 get() 不会添加键。 语法 setdefault() 方法语法: dict.setdefault(key,

【Python】字典的setdefault()方法

这是一道统计目标句子中单词组合出现次数的题目,输出的是一个字典: wordstring = 'it was the best of times it was the worst of times \ it was the age of wisdom it was the age of foolishness' # write your code below def get_pair_freq1(wordstring): wordlist = wordstring.split(" ") #分解成.

Layson4869的博客 699

AFSim 2.9中文手册实战指南:从安装到高级功能详解(附B站视频链接)

本文详细介绍了AFSim 2.9的安装配置、基础功能操作和高级功能应用,帮助用户快速掌握这款强大的仿真平台。从系统要求检查到多体动力学仿真,再到性能优化技巧,全面解析AFSim 2.9的使用方法,适合初学者和进阶用户参考。

weixin_30892037的博客 564

2026 具身智能 VLA/WAM 全栈学习与训练路线:从动作建模、SFT、RL 到世界模型的 RTX PRO 6000 96GB 单卡实战指南

我会把这张表做成“”而不是只列论文名:先核对每个模型截至的公开代码、训练目标和数据接口,再单独给你一套。对于没有公开、只有推理代码或训练细节不完整的模型,我会明确标出来,避免把“论文里提到”误写成“可复现”。目前有一个重要更新:。截至今天 NVIDIA 官方开源主线已经是换成 Cosmos-Reason2-2B/Qwen3-VL 架构,动作端仍是连续路线,而且官方明确给出单卡微调时默认只训练,峰值显存约。所以你的 96GB 单卡对 GR00T SFT 非常宽裕。可以。下面我按,把它整理成一张真正面向“

u013250861的博客 440

字典的setdefault()

print(my_dict) # 输出:{'name': 'Alice', 'age': 25, 'city': 'New York'}print(my_dict) # 输出:{'name': 'Alice', 'age': 25, 'city': 'Unknown'}print(my_dict) # 输出:{'name': 'Alice', 'age': 25, 'city': None}如果不指定,默认为 `None`。### **对比:`get()` vs `setdefault()`**

li758568825的专栏 969

Android AudioFlinger实战:如何用FastMixer优化低延迟音频流(附调试技巧)

本文深入解析了Android AudioFlinger的FastMixer线程机制,指导开发者如何利用该技术优化低延迟音频流。通过实战配置AAudio API、调整硬件缓冲区及线程优先级,并结合adb、Systrace等调试技巧,可将音频延迟显著降低至10毫秒以下,适用于音乐制作、游戏音效等实时音频处理场景。

weixin_29230901的博客 334

python 中的 setdefault 方法详解、底层原理和用法

# python 中的 setdefault 方法详解、底层原理和用法 ## 1、setdefault 方法功能 `setdefault是Python中字典的一个方法, 它用于在字典中查找指定键 如果键存在, 则返回对应的值; 如果键不存在,则在字典中添加该键,并将其值设置为指定的默认值` ## 2、setdefault 用法详解 ```python dict.setdefault(key, default_value) ``` `其中,key为要查找或添加的键,default_value为键不存在时设置的

Mogul的博客 1万+

GD32 I2C中断通信实战:主机与从机高效数据交换方案

本文详细解析了GD32微控制器I2C中断通信的实战方案,通过配置I2C0为主机、I2C1为从机,实现高效的双向数据交换。文章深入剖析了中断服务程序(ISR)的核心配置、关键状态标志位处理以及事件驱动机制,帮助开发者避免常见陷阱,提升系统响应速度与资源利用率,适用于传感器连接、多机通信等嵌入式场景。

cream的博客 846

用Python爬取公众号历史所有文章,看这篇就够了

手把手教你爬取公众号历史所有文章

u010522887的专栏 1万+

Python 语言及其应用 Chapter_5_Note_3 defaultdict_setdefault

这章讲标准库的内容 使用setdefault()和defaultdict()处理缺失的键 读取字典中不存在的键的值会抛出异常。使用字典函数get() 返回一个默认值会避免异常 发生。函数setdefault() 类似于get(), 但当键不存在时它会在字典中添加一项: >>> periodic_table = {'Hydrogen': 1, 'Helium': 2} >>> prin

bestallen的博客 951

Arduino程序设计(十)8×8 共阴极LED点阵显示(MAX7219)

本文主要介绍8×8 LED点阵显示实验,分别是:1、介绍MAX7219点阵模块;2、点阵显示部分图形;3、点阵显示数字 0~9 及 26 个英文字母。1、通过上述两个点阵实验,了解了8*8点阵显示的基本原理;2、通过SPI通信控制点阵显示,学会了Arduino用SPI通信方式控制外设。

Alice的博客 1万+

python之setdefault()和defaultdict()处理缺失值的键

# -*- coding: utf-8 -*- #使用setdefault()和defaultdict()处理缺失的键 periodict_table = {'Hydrogen':1,'Helium':2} #创建一个字典 print(periodict_table) #如果键不在字典中,新的默认值会被添加进去 carbon = periodict_table.setdefault('Car

依水寒 3758

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

w0shishabi的博客 2923

LIN协议V2.2A版介绍

IN 协议规范2.2A 版(2010 年 12 月发布)是面向低成本汽车网络的标准,核心采用单主多从架构,支持最高20kbit/s速率,通过单总线实现通信;定义了完整的协议栈(含协议层、传输层、物理层等),规定了帧结构(含 Break 字段、Sync 字节、保护标识符 PID、数据字段、校验和)、5 类帧类型(无条件帧、事件触发帧等)及调度表机制以保障确定性传输;

qflook的博客 319

18、Python之容器:字典(dict)缺失值处理不够优雅?试试defaultdict

关于字典中缺失值处理的场景,本文首先介绍了dict中常规的分支判断的处理方法,以及通过setdefault()简化分支处理的方法。之后,引入defaultdict,介绍了更加灵活、强大的处理方法。根据实际使用场景,可以自行选择!

南宫理的日知录 975

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

dict字典的基本使用

字典dict 字典是一个非线性结构,是key-value组成的键值对的数据集合。 字典的特点:可变的、无序的、key不重复。 字典的定义 【{}或者dict()】可以定义一个空字典 例如: a = dict() b = {} print(a,b,type(a),type(b)) 【dict(**kwargs)】可以使用name=value键值对,初始化一个字典 例如: c = d...

兰枫 1733

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Effective Python 第16、17、18条:字典get方法和设置键默认值

介绍python字典中获取值的另一种方法,和设置键的默认值的方法

qq_43745578的博客 709

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python字典get()方法详解:从基础语法到高级应用与性能优化

在Python编程中,字典(dict)作为核心数据结构,其键值对的高效存取是数据处理的基础。字典的get()方法提供了一种安全、优雅的键值查询机制,其核心原理在于通过一次哈希查找,在键存在时返回值,不存在时返回预设的默认值,从而避免KeyError异常。这一设计在工程实践中极具价值,它简化了代码逻辑,提升了程序的健壮性,尤其适用于处理用户输入、解析API响应、配置项读取等数据可能缺失的场景。本文将深入探讨get()方法,并与in操作符、setdefault()及defaultdict进行对比,分析其在多层嵌

weixin_30727835的博客 341

Python KeyError实战指南:从字典取值到生产级容错

KeyError是Python中因访问不存在字典键而触发的核心异常,本质反映数据契约的断裂而非语法错误。其处理逻辑需兼顾性能(如get()零开销 vs try/except三倍耗时)、可读性与调试成本。在电商订单同步、API响应解析、日志统计等高频场景中,合理选用dict.get()、defaultdict、safe_get_nested等方案,可实现柔性降级、自动初始化与精准断点定位。本文聚焦真实项目中的嵌套字典安全取值、配置动态加载、契约校验与大规模数据清洗,揭示KeyError背后的数据治理本质。

weixin_34314962的博客 395

流程的python阅读笔记-第三章·字典和集合

dict类在使用get方法找不到键会抛出异常的原因是没有定义__missing__魔术方法,字典处理缺失键的底层逻辑在__missing__方法,当__getitem__找不到键时将调用__missing__方法我们可以自定一个类继承dict基类,来进行自动处理缺失值#访问不存在的键print(address)#输出:Unknown在我们实际使用中,最好继承UserDict类而不是dict类dict类某些方法不会调用__missing__

junneg的博客 576

Python3 collections.defaultdict()与dict的使用和区别

python3 collections.defaultdict()与dict的使用和区别

twilight1999的博客 979

解锁 Pandas:数据处理

若为行设置了自定义索引(如学科名称),直接用标签查询。python运行。

ygyqinghuan的博客 277

Python列表查找全攻略:从index()到性能优化与实战避坑

在Python编程中,数据结构是组织与存储数据的核心方式,列表作为最基础且灵活的线性序列容器,其元素查找操作是数据处理流程中的高频需求。理解顺序查找的原理,即通过遍历逐个比对元素,是掌握列表操作的基础,其时间复杂度为O(n)。这项技术的价值在于直接决定了代码的执行效率与健壮性,尤其在处理用户数据、解析文件或进行算法运算时。常见的应用场景包括数据清洗中定位异常值、Web开发中验证表单参数、以及游戏逻辑中筛选特定状态的实体。本文将深入探讨如何利用`index()`方法进行精准定位,结合`count()`进行频次

weixin_33912638的博客 397
上一篇: Python的魔术方法(Magic Method)
下一篇: Python标准库collections模块
itanders
博客等级 码龄19年 178粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值