Python学习:字典和集合,真的了解吗?

本文详细介绍了Python中的字典和集合,包括它们的基础知识、性能优化和内部工作原理。字典在Python 3.7+中是有序的,提供高效的查找、添加和删除操作。集合则是一组唯一无序的元素。两者都是基于哈希表实现,支持O(1)的查找复杂度。文章通过实例展示了字典和集合在查找特定商品ID和统计不同价格时的性能优势,以及哈希冲突和哈希表扩展的处理方式。
摘要由CSDN通过智能技术生成

Python除了列表和元组还有两个很常见并且很有用的数据结构:字典(dict)和集合(set)。字典和集合在 Python 被广泛使用,并且性能进行了高度优化,故是非常重要的。
注:笔记来源于景霄老师的Python核心技术和实战。

一、字典和集合基础

字典是一系列由键(key)和值(value)配对组成的元素的集合,在 Python3.7+,字典被确定为有序(注意:在 3.6 中,字典有序是一个 implementation detail,在 3.7 才正式成为语言特性,因此 3.6 中无法 100% 确保其有序性),而 3.6 之前是无序的,其长度大小可变,元素可以任意地删减和改变。

相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。

集合和字典基本相同,唯一的区别,就是集合没有键和值的配对,是一系列无序的、唯一的元素组合

字典和集合的创建,通常有下面这几种方式:

d1 = {
   'name': 'jason', 'age': 20, 'gender': 'male'}
d2 = dict({
   'name': 'jason', 'age': 20, 'gender': 'male'})
d3 = dict([('name', 'jason'), ('age', 20), ('gender', 'male')])
d4 = dict(name='jason', age=20, gender='male') 
d1 == d2 == d3 ==d4
True

s1 = {
   1, 2, 3}
s2 = set([1, 2, 3])
s1 == s2
True

注意,Python 中字典和集合,无论是键还是值,都可以是混合类型。
字典的键不能是列表list,因为键是不可变的,而列表是动态的,可以是元组。

元素访问:字典访问可以直接索引键,如果不存在,就会抛出异常:

d = {
   'name': 'jason', 'age': 20}
d['name']
'jason'
d['location']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'location'

也可以使用 get(key, default) 函数来进行索引。如果键不存在,调用 get() 函数可以返回一个默认值。比如下面这个示例,返回了’null’。

d = {
   'name': 'jason', 'age': 20}
d.get('name')
'jason'
d.get('location', 'null')
'null'

接下来看集合,首先要强调的是,集合并不支持索引操作,因为集合本质上是一个哈希表,和列表不一样。所以,下面这样的操作是错误的,Python 会抛出异常:

s = {
   1, 2, 3}
s[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

想要判断一个元素在不在字典或集合内,我们可以用 value in dict/set 来判断。

s = {
   1, 2, 3}
1 in s
True
10 in s
False

d = {
   'name': 'jason', 'age': 20}
'name' in d
True
'location' in d
False

除了创建和访问,字典和集合也同样支持增加、删除、更新等操作。

d = {
   'name': 'jason', 'age': 20}
d[<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值