Python中dict和set的用法讲解

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

本文详细讲解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 相关产品和应用

全部下载

专题列表