字典
特点:字典是python中唯一的映射类型,采用键值对(key-value) 的形式存数据。
存储大量的数据,是关系型数据,查询数据快。
字典初始说明:
遍历字典从列表开始,列表是从头便利到尾的。字典使用二分查找。先劈一半,不匹配,在劈一半,再找。最后找到对应的值。
如果字典的数据是1到~ 00
例如:
要找75
对于字符串查找
每一个字符串,都有一个hash值,对应指定的字符
每个字符,hash表,都设定好了,是唯一的。
示例:
print(hash('a'))
输出:
如果重新执行后的效果为以下:
数据类型的分类:
1. 可变数据类型(不可哈希):list,dict,set
2. 不可变数据类型(可哈希):int, bool,str,tuple
容器类(承载各种数据类型):list, tuple ,dic
示例:
a = 'superman' a.capitalize()
对于原数据,没有改变。但开辟了新的内存空间。
字典的键:必须是不可变数据类型
字典的值:任意数据类型
数据类型分类,主要是可变和不可变
字典的键是唯一的。
字典的顺序:严格意义上讲,是无序的。
3.5之前,字典是无序的
3.6开始,字典创建的时候,是按照一定的顺序插入的值,看起来是有序的。
字典的增,删,改,查
#第一种:有则覆盖,无则添加 dic = {'name':'superman'} dic['hobby'] = 'girl' print(dic)
#第二种 setdeafult #这个没有加键值,None也是数据 dic = {'name':'superman'} dic.setdefault('hobby','girl') print(dic)
输出效果:
dic.setdefault('hobby') 虽然只指定了key,没有指定value,默认会填充None
添加键值对
dic = {'name':'superman','age':21} dic.setdefault('hobby','girl') print(dic)
输出结果:
添加一个已经存在的key
dic = {'name':'superman','age':21} dic.setdefault('name','江江') print(dic)
输出
上述2个添加的方法,只能一个个添加。
删
dic = {'name':'superman','age':21} print(dic.pop('age')) print(dic)
执行后输出结果:
删除一个不存在的key
dic = {'name':'superman','age':21} print(dic.pop('hobby'))
执行后输出结果:
删除一个不存在的key,并指定默认返回值None
dic = {'name':'superman','age':21} print(dic.pop('hobby',None)) print(dic)
执行输出:
推荐使用上述方法,删除一个key。因为如果key不存在时,不会报错,返回None。程序员最怕报错了!
删
#clear()清空 dic = {'name':'superman','age':22} dic.clear() print(dic)
执行后输出:
#删除字典 dic = {'name':'superman','age':21} del dic['hobby'] print(dic)
执行后输出结果:
推荐使用pop删除,并指定None
改
dic = {'name':'superman','age':21} dic['name'] = 'zhangsan' print(dic)
执行输出:
update() 针对2个字典的修改
dic = {'name':'superman','age':21} dic2 = {'name':'john','alan':76} dic2.update(dic) print(dic) print(dic2)
执行输出结果:
说明:
update()修改原则
有相同的就覆盖,没有的就添加
查
通过key查找
dic = {'name':'superman','age':21}
print(dic['name'])
执行后输出结果:
通过value 查找
dic = {'name':'superman','age':21} print(dic['superman'])
执行后报错:
注意:字典只能通过key查询,不能通过value查询,否则报错
#get()通过key 查询 dic = {'name':'superman','age':21} print(dic.get('name'))
执行后输出:
#查询一个不存在的key dic = {'name':'superman','age':21} print(dic.get('hobby'))
执行后输出为:None
默认的None返回值是可以改变的
dic = {'name':'superman','age':21} print(dic.get('hobby','查询失败!'))
执行后输出的结果:
#如果需要查询多个key,请使用for循环 dic = {'name': 'superman', 'age': 21} for i in dic: print(i)
#其它操作方法: dic = {'name': 'superman', 'age': 21} print(dic.keys()) print(type(dic.keys()))
执行后输出结果:
# keys()方法输出的数据是一个特殊类型,它相当于把所有的key放到了一个容器里面。 # 它类似于列表的容器,当它并不是列表。 #它可以循环 dic = {'name': 'superman', 'age': 21} for i in dic.keys(): print(i)
执行后输出结果:
# values() # 把所有的value放到一个容器里面 dic = {'name': 'superman', 'age': 21} for i in dic.values(): print(i)
执行后输出:
# items() # 将键值对作为一个整体,放到元组中。集中放到一个容器中。 dic = {'name': 'superman', 'age': 21} for i in dic.items(): print(i)
执行输出结果:
dic = {'name': 'superman', 'age': 21} print(list(dic.keys()))
执行输出结果: