使用dict和set
字典(dict)基础
Python中的字典(dict)是一种高效的键值对(key-value)数据结构,在其他语言中也被称为哈希表或映射(map)。
字典的基本使用
字典的高效性原理
字典之所以能快速查找,是因为它使用了哈希表(Hash Table)实现:
- 通过哈希函数计算键的哈希值
- 根据哈希值直接定位到值的存储位置
- 查找时间复杂度接近O(1),不会随着数据量增加而变慢
字典常用操作
字典的特点
- 无序性:Python 3.7+虽然保持插入顺序,但不应依赖此特性
- 键唯一性:每个键只能对应一个值
- 键不可变性:键必须是不可变类型(字符串、数字、元组等)
集合(set)基础
集合(set)是一种无序且不重复的元素集合,基于哈希表实现。
集合的基本使用
集合的特点
- 无序性:元素没有固定顺序
- 唯一性:自动去除重复元素
- 元素不可变性:只能包含不可变类型
不可变对象与可变对象
可变对象(Mutable)
如列表(list)、字典(dict)、集合(set)等,内容可以修改。
不可变对象(Immutable)
如字符串(str)、数字(int, float)、元组(tuple)等,创建后不能修改。
实际应用建议
-
字典使用场景:
- 需要快速查找的键值对数据
- 数据分组统计
- 缓存实现
-
集合使用场景:
- 去重处理
- 成员快速检测
- 集合运算(交集、并集等)
-
性能考虑:
- 字典和集合占用更多内存,但查询速度快
- 列表占用内存少,但查询速度随数据量增加而变慢
常见问题解答
Q: 为什么列表不能作为字典的键或集合的元素?
A: 因为列表是可变的,其哈希值可能改变,这会破坏字典和集合的内部结构。如果需要使用类似列表的结构作为键,可以使用不可变的元组。
Q: Python 3.7+中字典保持插入顺序,这是否意味着字典是有序的?
A: 虽然Python 3.7+中字典会保持插入顺序,但从语言规范角度,字典仍被视为无序结构。如果需要有序字典,应使用collections.OrderedDict。

