2. 字典和集合的辨析
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