【Python21天学习挑战赛】字典 && 小数据池
原创
©著作权归作者所有:来自51CTO博客作者我菜就爱学的原创作品,请联系作者获取转载授权,否则将追究法律责任
开头一叙:
无论是以后学习需要或者是三年后的工作需要,都需要用到python的工具,也接着这次活动的机会,把python系统的学一遍。跟着大佬,让python知识从入门到精通。
文章目录
- 字典定义
- 字典的操作:增、删、改、查
- 字典的其他操作
- 代码块
- is 与 == 区别
- 小数据池
字典—dict
作用:存储数据的,存储大量数据,可变的数据类型,无序的;比列表快。将数据和数据之间进行关联。
字典定义
dic={"孙悟空":80,"唐僧":100,"猪八戒":89,True:123,(12,2,3):["dada","憨憨"]} #字典中逗号分割是一个元素
# "孙悟空"(键):80(值) --键值对
print(dic)
{'孙悟空': 80, '唐僧': 100, '猪八戒': 89, True: 123, (12, 2, 3): ['dada', '憨憨']}
- 字典的键:必须是可哈希的,也就是不可变的数据类型(字符串就是不可变的数据类型)–避免哈希冲突使用开放寻址法。 字典的键要求唯一,若是有重复的后边的值将前面的值覆盖
- 字典的值:可以任意
- 和列表的区别:
字典的操作:增、删、改、查
1、增:
(1)暴力添加
dic={"孙悟空":80,"唐僧":100,"猪八戒":89}
dic["白骨精"]=78 #暴力添加
print(dic)
{'孙悟空': 80, '唐僧': 100, '猪八戒': 89, '白骨精': 78}
(2)dic.setdefault():若白骨精这个键去字典查询,如果不存在执行添加,存在就不添加了
dic.setdefault("孙悟空",78)
print(dic)
# 输出:(1){'孙悟空': 80, '唐僧': 100, '猪八戒': 89}
dic.setdefault("白骨精",78)
print(dic)
# 输出: (2){'孙悟空': 80, '唐僧': 100, '猪八戒': 89, '白骨精': 78}
2、删
(1)方式1、通过键值对的键去删除键
dic={"孙悟空":80,"唐僧":100,"猪八戒":89}
del dic["孙悟空"]
print(dic)
(2)通过键值对的键去删除键,有返回值,返回的是被删除的值
print(dic.pop("孙悟空") )
# 输出:80
print(dic)
# # 输出:{'唐僧': 100, '猪八戒': 89}
(3)dic.clear()
dic.clear()
print(dic)
# 输出:{}
3、改
(1)当字典中没有某个键值对的时候就是添加,存在的话就是修改
dic={"孙悟空":80,"唐僧":100,"猪八戒":89}
dic["孙悟空"]="孙猴子" #当字典中没有某个键值对的时候就是添加,存在的话就是修改
print(dic)
# 输出:{'孙悟空': '孙猴子', '唐僧': 100, '猪八戒': 89}
(2)dic.update()
dic.update({"黄梅眉大王":89,"观音":56,"孙悟空":100})
print(dic)
# 输出:{'孙悟空': 100, '唐僧': 100, '猪八戒': 89, '黄梅眉大王': 89, '观音': 56}
dic1={"黄梅眉大王":89,"观音":56,"孙悟空":100}
dic1.update(dic)
print(dic1)
# 输出:{'黄梅眉大王': 89, '观音': 56, '孙悟空': 80, '唐僧': 100, '猪八戒': 89}
4、查
dic={"孙悟空":80,"唐僧":100,"猪八戒":89}
# for i in dic: #循环获取的是字典中每个键值对的键
# print(i)
print(dic.get("孙悟空")) #通过键值对中的键获取键值对的值
print(dic.get("沙僧")) #若字典没有对应的键,返回None
# 输出:80
# None
字典的其他操作
dic={"孙悟空":80,"唐僧":100,"猪八戒":89}
# for i in dic:
# print(i,dic.get(i)) #获取所有键值对
print(dic.keys()) #高仿列表,获取所有的键,支持for循环遍历,不支持索引
# 输出:dict_keys(['孙悟空', '唐僧', '猪八戒'])
print(dic.values()) #高仿列表,获取所有的值
# 输出:dict_values([80, 100, 89])
print(list(dic.values()))# 转换成列表
# 输出:[80, 100, 89]
print(dic.items())
for i in dic.items():
print(i)
dict_items([('孙悟空', 80), ('唐僧', 100), ('猪八戒', 89)])
('孙悟空', 80)
('唐僧', 100)
('猪八戒', 89)
字典的嵌套:
dic={1001:["刘备","关羽","张飞"],
1002:{"汪峰":{"前妻1":["大烧饼"],"前妻2":["熊大","熊二"],"国际章":"肉丝"}},
1003:{"陈冠希":["阿娇","阿萨","张柏芝"]},
1004:{"韦小宝":[{"教主夫人":["教主"]},{"阿柯":"刺客"},{"双儿","天地会"},{"爱新觉罗建宁":"公主"}]}
}
# 找出教主
print(dic[1004]["韦小宝"][0]['教主夫人'][0])
# 找出熊二
print(dic[1002]["汪峰"]["前妻2"][1])
小数据池
代码块
1、定义:一个模块,一个函数,一个类,一个文件等都是一个代码块。
在python解释器中,每一行代码就是一个代码块
is 与 == 区别
1、== 是判断两边的值是否相等
a=10
b=10
print(a==b)
# 输出:True
2、is是比较两边的地址内存是否相等
a=10
b=10
print(a is b) #is基于内存地址进行判断
# 输出:True
小数据池
1、什么是小数据池
答:小数据池,也称为小整数缓存机制,或者称为驻留机制等等
针对整数:
答:Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。
针对字符串:
答:在同一代码块下,只有内容相同就采用相同的内存地址,乘法的时候总长度不能超过20,乘法的时候中文,特殊符合乘以0或者1
针对布尔值:
在同一代码块下,只有内容相同就采用相同的内存地址