(一)介绍
字典是一种可变的容器,可以存储任意类型数据
字典中的每个数据都是用"键"进行索引的,而不像序列可以用下标(index)来进行索引
字典中的数据没有先后顺序关系,字典的存储是无序的
字典中的数据以键(key)-值(value)对的形式进行映射存储
字典的键不能重复,只能用"不可变的类型作为字典的键"
字典的字面值得表示方式:
字典的表示方式以{}括起来,以冒号(:)分隔键-值对
各键-值对中间用逗号分隔开
(二)创建字典:
d={} #d绑定空字典
创建非空字典:
d = {'name':'Jane','age':16}
d = {'year':2018,'month':4,'day':1}
(三)字典的构造函数dict
dict() 生成一个空字典,等同于{}
dict(iterable) 用于迭代对象初始化一个字典
dict(**kwargs) 用命名关键字传参形式生成一个字典
示例:
d = dict()
d = dict([('name','Jane'),('age',15)])
d = dict(name='Jane',age=15)
(四)字典的键为不可变类型:
bool,int,float,complex,str,tuple,frozenset(固定集合),bytes(字节串),包括None
可变的类型(不能充当字典的键):list,dict,set(集合),bytearray(字节数组)
(五)字典的基本操作:
(1)键索引:
语法:字典(键)
示例:
>>>d = {‘name’:’Jane’,’age’:15}
>>>d{‘name’}
‘Jane’
>>>d{‘age’}
15
(2)添加/修改字典元素
字典[键] = 值对象
示例:
d = {}
d[‘birthday’] = (2002,1,1) #添加键值对
d[‘age’] =16 #添加
d[‘age’]=17 #修改‘age’键对应的值
(六)删除字典元素del语句
语法:del 字典[键]
示例:
d = {‘name’:’Jane’,’age’:16}
del d[‘age’] #删除‘age’键,无键则无值,即同时删除了值
(七)字典的成员资格判断 in/ not in运算符
用in 运算符可以判断一个键是否存在于字典中,如果存在则返回True,否则返回False
not in 返回值与 in 相反
示例:
d = {1:"一",2:"二"}
1 in d #True
2 not in d #False
(八)列表的in 运算符和字典的in运算符比较:
(1)列表的in运算符计算时间会因为列表中元素个数的增加而增加
L = [3,4,5,6,……,10976] if 888 in L: print(“888在列表中”) #慢
(2)字典的in运算符计算时间不会因为键值对的个数增加而增加,操作速度快于列表:
d= {3:”三”,4:“四”,5:“五”,……,10976:None} if 888 in d: print(“888在字典的键中”) #快
(九)字典的迭代访问:
容器是可迭代对象,字典只能对键进行迭代访问
d = {'name':'小张','birthday':(2008,8,8)} for k in d: print(k) print(d[k])
可以用于字典的内建(built-in)函数:
len(x) 返回字典的键值对的个数
max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典的所有键的和
any(x) 对所有键进行真值测试,有一个True结果为True
all(x) 对所有键进行真值测试,所有为True才为True
示例:
d = {1:'one',2:'two',3:'three'} for kv in d.items(): print(kv) #-->(1,’one’) # (2,’two’) # (3,’three’)
(十)字典推导式:
作用:用可迭代对象生成字典
语法:
{键表达式:值表达式 for 变量 in 可迭代对象[if 真值表达式]}
注:[]的内容代表可省略
no = [1001,1002,1003,1004] names = ['Tom','Jerry','Spike','Tyke'] d = {no[i]:names[i] for i in range(len(no))} #或者 d = {i:j for i in no for j in names} #-->d = {1001:’Tom’,1002:’Jerry’,1003:’Spike’,1004:’Tyke’}
(十一)字典推导式的嵌套:语法同列表推导式嵌套
(十二)字典vs列表
都是可变对象
索引方式不同,列表用整数索引,字典用键索引
字典的查找速度可能会快于列表(重要)
列表的存储是有序的,字典的存储是无序的