Python核心技术与实战学习笔记(二):字典和集合的辨析

Python字典与集合详解:性能、操作与实现原理
本文介绍了Python中的字典和集合,包括它们的概念、创建方式、访问方法、增删查改操作及排序。字典是有序的键值对集合,而集合是无序的唯一元素集合。字典的get()和setdefault()方法提供安全访问,集合用于去重。两者都基于哈希表实现,具有高效性能,查询、增加、查找和删除操作的时间复杂度为O(1)。文章还深入探讨了字典和集合的内部结构以及哈希表的工作原理。

2.1 概念

字典

  • 字典是一系列由键(key)和值(value)配对组成的元素的集合
  • 在Python 3.7+,字典被确定为有序(之前的版本,我们可以通过导入collections模块的OrderedDict实现有序字典)
  • 字典的性能比列表和元组更优,特别是增删查改操作,字典都能在常数时间复杂度内完成

注:字典的所谓有序,是指增加删除查询元素时都按照既定的顺序

集合

  • 集合和字典基本相同,但集合没有键值对,由一系列无序的、不重复的元素组成(故集合经常被用于进行去重操作)

2.2 操作

创建

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
 # 显然d1使用{}直接调用底层C写好的代码效率最高,其他三种方法都调用了dict()函数
 ---------------------------------------------------------
s1 = {1, 2, 3}
s2 = set([1, 2, 3])
s1 == s2
True
# 同理,s1效率最高

快速创建一个有规律的字典的方法:

利用zip函数:

id = [x for x in range(0, 10)]
price = [x for x in range(20, 30)]
products = list(zip(id, price))
========================
[(0, 20),
 (1, 21),
 (2, 22),
 (3, 23),
 (4, 24),
 (5, 25),
 (6, 26),
 (7, 27),
 (8, 28),
 (9, 29)]

products = dict(products)
products
========================
{0: 20, 1: 21, 2: 22, 3: 23, 4: 24, 5: 25, 6: 26, 7: 27, 8: 28, 9: 29}

字典推导式:

{i:i%2==0 for i in range(10)}    # 集合括号里要加冒号:才是字典推导式
out: {0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}

{i:i+2 for i in range(10)}
out: {0: 2, 1: 3, 2: 4, 3: 5, 4: 6, 5: 7, 6: 8, 7: 9, 8: 10, 9: 11}

字典的fromkeys()方法

Python 字典 fromkeys( ) 方法用于创建一个新的字典,并以可迭代对象中的元素分别作为字典中的键,且所有键对应同一个值,默认为None。
语法:

dict.fromkeys(iterable[,value=None])  #返回一个新字典
* iterable-- 用于创建新的字典的键的可迭代对象(字符串、列表、元祖、字典)。
* value -- 可选参数, 字典所有键对应同一个值的初始值,默认为None。

在这里插入图片描述

访问

字典

直接访问索引
d = {'name': 'jas
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值