python全栈学习--day5

时间:2023-03-09 07:28:58
python全栈学习--day5

字典

特点:字典是python中唯一的映射类型,采用键值对(key-value) 的形式存数据。

存储大量的数据,是关系型数据,查询数据快。

字典初始说明:

遍历字典从列表开始,列表是从头便利到尾的。字典使用二分查找。先劈一半,不匹配,在劈一半,再找。最后找到对应的值。

如果字典的数据是1到~ 00

例如:

要找75

第一次,先找50。 50 比 75小,比较
第二次,找50~100之间的。劈一半,找75

对于字符串查找

每一个字符串,都有一个hash值,对应指定的字符

每个字符,hash表,都设定好了,是唯一的。

示例:

print(hash('a'))

  输出:

python全栈学习--day5

如果重新执行后的效果为以下:

python全栈学习--day5

数据类型的分类:

python全栈学习--day5

python全栈学习--day5

  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)

 输出效果:

python全栈学习--day5

dic.setdefault('hobby') 虽然只指定了key,没有指定value,默认会填充None

添加键值对

dic = {'name':'superman','age':21}
dic.setdefault('hobby','girl')
print(dic)

 输出结果:

python全栈学习--day5

添加一个已经存在的key

dic = {'name':'superman','age':21}
dic.setdefault('name','江江')
print(dic)

 输出

 python全栈学习--day5

 上述2个添加的方法,只能一个个添加。 

 删

dic = {'name':'superman','age':21}
print(dic.pop('age'))
print(dic)

执行后输出结果:

python全栈学习--day5

删除一个不存在的key

dic = {'name':'superman','age':21}
print(dic.pop('hobby'))

执行后输出结果:

python全栈学习--day5

删除一个不存在的key,并指定默认返回值None

dic = {'name':'superman','age':21}
print(dic.pop('hobby',None))
print(dic)

 执行输出:

python全栈学习--day5

推荐使用上述方法,删除一个key。因为如果key不存在时,不会报错,返回None。程序员最怕报错了!

#clear()清空
dic = {'name':'superman','age':22}
dic.clear()
print(dic)

执行后输出:

python全栈学习--day5

#删除字典
dic = {'name':'superman','age':21}
del dic['hobby']
print(dic)

 执行后输出结果:

python全栈学习--day5

推荐使用pop删除,并指定None

 

 改

dic = {'name':'superman','age':21}
dic['name'] = 'zhangsan'
print(dic)

执行输出:

python全栈学习--day5

update() 针对2个字典的修改 

dic = {'name':'superman','age':21}
dic2 = {'name':'john','alan':76}
dic2.update(dic)
print(dic)
print(dic2)

 执行输出结果:

python全栈学习--day5

说明:

update()修改原则

有相同的就覆盖,没有的就添加

通过key查找

dic = {'name':'superman','age':21}
print(dic['name'])

执行后输出结果:

python全栈学习--day5

通过value 查找

 

dic = {'name':'superman','age':21}
print(dic['superman'])

执行后报错:

python全栈学习--day5

注意:字典只能通过key查询,不能通过value查询,否则报错

 

#get()通过key 查询
dic = {'name':'superman','age':21}
print(dic.get('name'))

  执行后输出:

python全栈学习--day5

#查询一个不存在的key
dic = {'name':'superman','age':21}
print(dic.get('hobby'))

  执行后输出为:None

 默认的None返回值是可以改变的

 

dic = {'name':'superman','age':21}
print(dic.get('hobby','查询失败!'))

  执行后输出的结果:

python全栈学习--day5

 

#如果需要查询多个key,请使用for循环
dic = {'name': 'superman', 'age': 21}
for i in dic:
print(i)

  python全栈学习--day5

#其它操作方法:
dic = {'name': 'superman', 'age': 21}
print(dic.keys())
print(type(dic.keys()))

  执行后输出结果:

python全栈学习--day5

# keys()方法输出的数据是一个特殊类型,它相当于把所有的key放到了一个容器里面。
# 它类似于列表的容器,当它并不是列表。
#它可以循环
dic = {'name': 'superman', 'age': 21}
for i in dic.keys():
print(i)

执行后输出结果:

python全栈学习--day5

# values()
# 把所有的value放到一个容器里面
dic = {'name': 'superman', 'age': 21}
for i in dic.values():
print(i)

执行后输出:

python全栈学习--day5  

# items()
# 将键值对作为一个整体,放到元组中。集中放到一个容器中。
dic = {'name': 'superman', 'age': 21}
for i in dic.items():
print(i)

执行输出结果:

python全栈学习--day5

 

dic = {'name': 'superman', 'age': 21}
print(list(dic.keys()))

  执行输出结果:

python全栈学习--day5