Python中dict和set的用法讲解

闻溪
闻溪
发布时间:2026-10-11| 2人浏览过
原创

本文详细讲解Python中字典(dict)和集合(set)的核心用法。字典通过键值对实现快速查找,需确保键为不可变对象;集合用于存储不重复元素,支持交集、并集等数学运算。文章涵盖创建、增删改查及常见错误处理,帮助读者高效掌握数据结构。

字典 (dict) 的核心机制与操作

Python 中的 dict(全称 dictionary,也称 map)是一种通过键-值(key-value)对进行存储的数据结构。其核心优势在于极快的查找和插入速度,且性能不随数据量增加而显著下降。这种高效性是通过“空间换时间”的策略实现的:内部利用哈希算法(Hash)计算键的位置,因此查找速度恒定。

字典的创建与基本操作

字典的创建通常通过大括号 {} 或 dict() 函数完成。以下是字典的基本操作示例:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

可以通过键直接赋值来添加或更新元素。如果键已存在,新值将覆盖旧值:

>>> d['Adam'] = 67
>>> d['Adam']
67
>>> d['Jack'] = 90
>>> d['Jack'] = 88  # 更新已有键的值
>>> d['Jack']
88

键的存在性检查与安全获取

直接通过 d[key] 访问不存在的键会引发 KeyError。为避免程序崩溃,推荐使用 in 关键字检查键是否存在,或使用 get() 方法:

>>> 'Thomas' in d
False
>>> d.get('Thomas')  # 返回 None
>>> d.get('Thomas', -1)  # 指定默认返回值
-1

删除元素

使用 pop(key) 方法可以删除指定键及其对应的值,并返回该值:

>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

字典键的限制:不可变对象

字典的键必须是不可变对象(如字符串、整数、元组等),因为哈希算法要求键的值在生命周期内保持不变。列表(list)是可变对象,不能作为字典的键:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
TypeError: unhashable type: 'list'

需要注意的是,元组(tuple)虽然是不可变对象,但如果其内部包含可变元素(如列表),则整个元组也是不可哈希的,不能作为字典键:

>>> a = ('james', 'jordan', 'kobe')  # 纯字符串元组,不可变
>>> dict1 = {a: '篮球运动员'}
>>> dict1[a]
'篮球运动员'
>>> b = ('james', ['jordan', 'kobe'])  # 包含列表,可变
>>> dict2 = {b: '篮球运动员'}
TypeError: unhashable type: 'list'

集合 (set) 的用法与特性

集合(set)是一组无序且唯一元素的集合,不存储值(value)。其内部原理与字典类似,同样基于哈希算法,因此要求放入集合的元素必须是不可变对象。

创建与去重

通过 set() 函数或大括号创建集合。集合会自动过滤重复元素:

>>> s = set([1, 2, 3])
>>> s
set([1, 2, 3])
>>> s = set([1, 1, 2, 2, 3, 3])  # 自动去重
>>> s
set([1, 2, 3])

增删元素

使用 add(key) 添加元素,若元素已存在则不执行任何操作;使用 remove(key) 删除元素:

>>> s.add(4)
>>> s
set([1, 2, 3, 4])
>>> s.add(4)  # 重复添加无效
>>> s
set([1, 2, 3, 4])
>>> s.remove(4)
>>> s
set([1, 2, 3])

集合运算

集合支持交集(&)、并集(|)等数学集合操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2  # 交集
set([2, 3])
>>> s1 | s2  # 并集
set([1, 2, 3, 4])

可变与不可变对象的深入理解

理解 Python 中可变(mutable)与不可变(immutable)对象的区别,对于正确使用 dict 和 set 至关重要。

  • 不可变对象:如字符串(str)、整数(int)、元组(tuple,且不含可变元素)。对不可变对象进行操作时,会创建新对象并返回,原对象内容不变。
  • 可变对象:如列表(list)、字典(dict)。对可变对象操作时,内部内容会直接变化。

示例对比:

>>> a = ['c', 'b', 'a']
>>> a.sort()  # 原地排序,改变原列表
>>> a
['a', 'b', 'c']
>>> a = 'abc'
>>> a.replace('a', 'A')  # 返回新字符串,原字符串不变
'Abc'
>>> a
'abc'

这种特性决定了为什么列表不能作为字典的键或集合的元素——因为它们的哈希值可能随内容变化而改变,导致查找失败。

总结

字典(dict)和集合(set)是 Python 中高效处理数据的核心工具。字典通过键值对实现快速查找,适用于需要映射关系的场景;集合用于存储唯一元素,支持高效的集合运算。使用时需注意:字典的键和集合的元素必须是不可变对象,以避免哈希冲突和潜在错误。掌握这些特性,能显著提升代码的性能与健壮性。

以上就是Python中dict和set的用法讲解的详细内容,更多关于Python数据结构、字典操作、集合运算的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。