二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
比如字典有1~100的数据,现在想要查找75。
先劈一半,找到中间值50。判断50和75的大小,发现小于,再劈一半。
找到中间值75,直接返回结果。
执行输出:
字典可以存放各种数据类型
数据类型的分类:
可变数据类型(不可哈希):list,dict,set
不可变数据类型(可哈希):int,bool,str,tuple
容器类型:
容器类(承载各种数据类型):list,tuple,dic
字典的键:必须是不可变数据类型
字典的值:任意数据类型。
字典的键是唯一的。
数据类型分类,主要是可变和不可变
字典的顺序:
严格意义上来讲,是无序的
3.5之前,字典是无序的
3.6开始,字典创建的时候,按照一定的顺序插入的值,看起来是有序的
下面介绍字典的增删改查
增
第一种:
执行输出:
{'age': 21, 'hobby': 'girl', 'name': 'xiao'}
第二种:
setdefault() 无则添加,有则不变
执行输出:
{'hobby': None, 'name': 'xiao', 'age': 21}
dic.setdefault('hobby') 虽然只指定了key,没有指定value,默认会填充None
添加键值对
执行输出:
{'age': 21, 'name': 'xiao', 'hobby': 'girl'}
添加一个已经存在的key
执行输出:
{'name': 'xiao', 'age': 21}
上述2个添加的方法,只能一个个添加。
删
pop() 删除指定的key
pop()是所有方法中,唯一有返回值的。
执行输出:
删除一个不存在的key
执行报错: KeyError: 'hobby'
删除一个不存在的key,并指定默认返回值None
执行输出:
推荐使用上述方法,删除一个key。因为如果key不存在时,不会报错,返回None。程序员最怕报错了!
clear() 清空
执行输出:
{}
del 删除字典
del也可以删除指定的key,如果不存在,会报错
推荐使用pop删除,并指定None
popitem() 随机删除,有返回值
执行输出:
改
执行输出:
{'name': 'zhangsan', 'age': 21}
update() 针对2个字典的修改
执行输出:
可以发现dic没有改变,dic2改变了
update()修改原则
有相同的就覆盖,没有的就添加
查
通过key查找
执行输出:
xiao
通过value查询
执行报错: KeyError: 'xiao'
字典只能通过key查询,不能通过value查询,否则报错
get() 通过key查询
执行输出:
xiao
查询一个不存在的key
执行输出:
None
默认的None返回值是可以改变的
执行输出:
亲,木有这个字哦!
如果需要查询多个key,请使用for循环
执行输出:
其它操作方法:
keys() values() items()
keys()
执行输出:
keys()方法输出的数据是一个特殊类型,它相当于把所有的key放到了一个容器里面。
它类似于列表的容器,当它并不是列表。
它可以循环
执行输出:
values()
把所有的value放到一个容器里面
执行输出:
items()
将键值对作为一个整体,放到元组中。集中放到一个容器中。
执行输出:
特殊类型转换为列表
执行输出:
['age', 'name']
分别循环key和value
执行输出:
现有如下字典,需要遍历key
第一种写法:
第二种写法:
以上2段代码,功能是一样的。推荐使用第二种。
概念: 分别赋值
比如
执行输出:
2 3
面试题:
a = 4,b = 5,请用一行代码,将a和b的值互换。
答案
字典的嵌套
出一个题目
1. 给列表追加一个元素:'旺旺'
2. 给列表lisi全部大写
3. 给dic2 对应的字典添加一个键值对:hobby:girl
答案:
执行输出:
{'name_list': ['张三', 'lisi', '隔壁王叔叔', '旺旺'], 'dic2': {'name': '太白', 'age': 12}}
{'name_list': ['张三', 'LISI', '隔壁王叔叔', '旺旺'], 'dic2': {'name': '太白', 'age': 12}}
{'name_list': ['张三', 'LISI', '隔壁王叔叔', '旺旺'], 'dic2': {'hobby': 'girl', 'name': '太白', 'age': 12}}
今日作业:
答案:
第1题
第2题
第3题:
第4题
4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
先使用split()指定分割符| 切割成列表
执行输出:
k:1
k1:2
k2:3
k3:4
在for循环里面是,指定分割符:,再次切割
执行输出:
['k', '1']
['k1', '2']
['k2', '3']
['k3', '4']
那么列表中索引为0的就是key,索引为1就是value
使用字典方法添加键值对,完整代码如下:
执行输出:
{'k1': '2', 'k2': '3', 'k': '1', 'k3': '4'}
代码优化
执行输出:
{'k3': '4', 'k2': '3', 'k': '1', 'k1': '2'}
将数字转换为整形
执行输出:
{'k2': 3, 'k': 1, 'k1': 2, 'k3': 4}
第5题:
5、元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
先打印列表的每一个元素
执行输出:
11
22
33
...
90
定义字典,将大于66的,放入k1的列表中
执行输出:
{'k2': [], 'k1': [77, 88, 99, 90]}
将小于66的放入k2中,完整代码如下:
执行输出:
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]}
由于66跑到k2里面了,在改一下判断条件
执行输出:
{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55, 66]}
第6题
先输入商品列表,并打印序号(使用index方法)
6.1
执行输出:
0 手机
1 电脑
2 鼠标垫
3 游艇
有了序号,就可以打印商品
判断用户的输入的内容是否为数字,定义一个非法字符串aa
6.2
执行输出:
您输入的含有非数字元素
判断用户输入的数字是否大于列表的长度,定义一个数字11
6.3
执行输出:
你输入的序号商品不存在,请重新输入!
重新修改数字为1,再次执行,就可以输出商品了。
上面的代码是一次性输入,如果需要循环执行,怎么办?用while循环
先来一个简单的循环输入input,根据第4点要求,遇到Q或者q,退出程序
6.4
执行程序:
执行执行之前,打印商品列表
6.5
执行输出:
将6.3里面的for循环代码复制,替换到6.5里面pass里面,最后代码如下:
执行输出:
输出部分修饰一下:
执行输出:
代码优化:
执行效果同上:
再次优化
执行输出:
调整序号,加1。取值的时候,再减1
执行输出:
老师的代码:
执行输出:
明日默写内容。
1)字典的增删改查。
2)过滤敏感字符代码的默写。
到此这篇增删改查四个命令语句(增删改查基本语句)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/68266.html