Python中dict和set的用法讲解
本文详细讲解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数据结构、字典操作、集合运算的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









