当前位置: 首页 > news >正文

python---字典(dict)

文章目录

  • 1. 字典的基本特性
  • 2. 创建字典
  • 3. 字典操作
    • 访问元素
    • 添加/修改元素
    • 删除元素
  • 4. 常用方法
    • pop和popitem的区别
      • pop(key[, default])
      • popitem()
      • 主要区别总结
    • setdefault方法
      • setdefalut与get的区别
  • 5. 字典推导式
  • 6. 查找键值是否存在
    • 1. 使用 in 关键字(推荐)
    • 2. 使用 get() 方法
    • 3. 使用 keys() 方法
    • 4. 使用 try-except 块
    • 性能比较
  • 7. 特殊字典类型
  • 8. 注意事项
  • 9. 应用场景

字典(dict)是 Python 中最重要、最常用的内置数据结构之一,用于存储 键值对(key-value pairs) 数据。

1. 字典的基本特性

1、无序集合(Python 3.7+ 后按插入顺序保存)

2、可变(可动态增删改)

3、键必须唯一且不可变(如字符串、数字、元组)

4、值可以是任意类型(包括其他字典)

2. 创建字典

# 方式1:花括号
d1 = {'name': 'Alice', 'age': 25}# 方式2:dict()构造函数
d2 = dict(name='Bob', age=30)# 方式3:键值对列表
d3 = dict([('name', 'Charlie'), ('age', 35)])# 空字典
empty_dict = {}

3. 字典操作

访问元素

person = {'name': 'Alice', 'age': 25}# 获取值
print(person['name'])  # 'Alice'# 使用get()方法(避免KeyError)
print(person.get('age'))     # 25
print(person.get('height'))  # None
print(person.get('height', 170))  # 默认值170

添加/修改元素

person['age'] = 26      # 修改
# city是原本没有的键
person['city'] = 'NY'   # 新增

删除元素

del person['city']      # 删除键值对
age = person.pop('age') # 删除并返回值
person.clear()          # 清空字典

4. 常用方法

方法描述
keys()返回所有键
values()返回所有值
items()返回所有键值对
update()合并字典
setdefault()安全获取/设置值
popitem()移除最后插入的项
person = {'name': 'Alice', 'age': 25}# 遍历
for key in person: ...
for value in person.values(): ...
for key, value in person.items(): ...# 合并字典
extra_info = {'city': 'NY', 'job': 'Engineer'}
person.update(extra_info)

pop和popitem的区别

这两个方法都用于从字典中移除并返回元素,但有重要区别:

pop(key[, default])

1、移除指定键的元素并返回其值

2、必须指定要移除的键,如果键不存在:

2.1、不提供默认值:引发 KeyError

2.2、提供默认值:返回默认值而不报错

popitem()

1、移除并返回最后插入的键值对 (Python 3.7+),在 Python 3.6 及之前版本,popitem() 移除的是随机项,不是最后插入的

2、不需要参数

3、字典为空时引发 KeyError

4、返回形式为 (key, value) 元组

主要区别总结

特性pop()popitem()
参数需求必须指定key不需要参数
返回值只返回值返回(key, value)元组
空字典行为键不存在时可能报错必定报错
移除位置指定键最后插入的项(LIFO)
Python版本影响所有版本行为一致3.7+才保证LIFO顺序
典型用途移除特定元素实现栈/缓存淘汰

setdefault方法

setdefault用于获取字典中指定键的值,如果键不存在,则会设置默认值并返回该默认值。

setdefalut与get的区别

get()方法在键不存在时返回默认值但不会修改字典

setdefault()方法在键不存在时会修改字典,添加键值对

5. 字典推导式

类似列表推导式:

squares = {x: x*x for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

6. 查找键值是否存在

1. 使用 in 关键字(推荐)

my_dict = {'name': 'Alice', 'age': 25}if 'name' in my_dict:print("键 'name' 存在")  # 会执行if 'gender' not in my_dict:print("键 'gender' 不存在")  # 会执行

2. 使用 get() 方法

my_dict = {'name': 'Alice', 'age': 25}# 如果键存在,返回对应的值;不存在则返回None(或指定的默认值)
value = my_dict.get('name')
if value is not None:print(f"键 'name' 存在,值为 {value}")

3. 使用 keys() 方法

my_dict = {'name': 'Alice', 'age': 25}if 'age' in my_dict.keys():print("键 'age' 存在")

4. 使用 try-except 块

my_dict = {'name': 'Alice', 'age': 25}try:value = my_dict['gender']
except KeyError:print("键 'gender' 不存在")

性能比较

1、in 操作符是最快和最Pythonic的方式

2、get() 方法在需要同时获取值时很方便

3、keys() 方法在Python 3中与直接使用in性能相同(因为keys()返回的是视图对象)

4、try-except 适用于预期键通常存在的情况

7. 特殊字典类型

collections模块中的特殊类型,有兴趣可以自己去搜索,博主在这里就不带着大家一块学习了。
collections.defaultdict:带默认值的字典

collections.OrderedDict:保持插入顺序的字典

collections.Counter:计数器专用字典

8. 注意事项

1、检查键是否存在:if key in dict 比 try-except 更高效

2、字典键必须是可哈希的(不可变类型)

3、Python 3.7+ 中字典保持插入顺序

4、不允许用下表查找

9. 应用场景

如JSON数据处理、配置存储。

http://www.lryc.cn/news/600245.html

相关文章:

  • OpenCV图像梯度、边缘检测、轮廓绘制、凸包检测大合集
  • 【Linux手册】操作系统如何管理存储在外设上的文件
  • 2025牛客暑期多校第4场——G
  • MCP协议深度解析:客户端-服务器架构的技术创新
  • CMakeLists.txt 怎么写
  • 电脑开机后网络连接慢?
  • @PathVariable与@RequestParam的区别
  • 【洛谷】单向链表、队列安排、约瑟夫问题(list相关算法题)
  • 刷题日记0725
  • 二开----02
  • 【前端工程化】前端项目开发过程中如何做好通知管理?
  • Model Control Protocol 三层架构设计,三种传输方式,完成MCP项目构建实现工具调试,多维度评价指标检测多工具多资源调用的鲁棒性和稳健性
  • 从零本地部署使用Qwen3-coder进行编程
  • Web开发传参的四种常见方式介绍
  • 太极生两仪,两仪生四象,四象生八卦
  • 智慧电视:开启养老新时代
  • 【图像理解进阶】如何对图像中的小区域进行细粒度的语义分割?
  • [2025CVPR-图象分类方向]CATANet:用于轻量级图像超分辨率的高效内容感知标记聚合
  • Python day24
  • day 35打卡
  • DNS 协议
  • OSI 七层模型和五层模型
  • Effective C++ 条款02:尽量以 const, enum, inline 替换 #define
  • HTTP 请求方法有哪些?
  • 浅析PCIe 6.0 ATS地址转换功能
  • LP-MSPM0G3507学习--11ADC之二双通道高速DMA采样
  • Sweet Home 3D:一款免费的室内装修辅助设计软件
  • cocos creator 3.8.6 websocke的一直报错WebSocket is not a constructor
  • 力扣面试150题--寻找旋转排序数组中的最小值
  • 关于数据库表id自增问题