数据类型字典
主要内容:
1,字典的简单介绍
2,字典增删改查和其他操作
3,字典的嵌套
一,字典的简单介绍
字典(dict)是python中唯一的一个映射类型,他是以{ }括起来的键值对组成的,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为hash算法,所以,切记,在dict中存储的key-value中的key必须是可hash的.
已知的可哈希(不可变)的数据类型:int,str,tuple,bool
不可hash的数据类型是:list,dict,set
语法:
{"key1": "value", "key2": "value2"......}
注意:key必须是不可变的,value没有要求,可以保存任意类型的数据
# 合法 dic = {123: 456, True: 99, "id": 1, "name": "chenrun", "age": 18, "stu": ["帅哥", "美女"], (1,2,3): "alex"} print(dic[123]) print(dic[True]) print('id') print(dic['stu']) print(dic[(1,2,3)]) # 不合法 # dic = {[1,2,3]: "周杰伦"} # list是可变的,不能作为key # dic = {{1: 2}: "哈哈"} # dict是可变的,不能作为key
dict保存的数据不是按照我们添加进去的顺序保存的,是按照hash表的顺序保存的,而hash表不是连续的,所以不能进行切片工作,它只能通过key来获取dict中的数据
二,字典的增删改查和其他操作
1,增加
dic = {} dic['name'] = "周杰伦" # 如果dict中没有出现这个key,就会新增加一个key-value的组合进dict dic["age"] = 19 print(dic) # {'name': '周杰伦', 'age': 19} # 如果dict中没有出现过这个key-value,可以中国setdefault设置默认值 dic.setdefault("name1") # 可以往里面设置值 dic.setdefault("name1", "chenrun") # 默认值只能设定一次,因此"chenrun"不会改变原来的默认值None print(dic) # {'name': '周杰伦', 'age': 19, 'name1': None}
2, 删除
dic = {"name": "chenrun", "age": 13, "sex": "男", "marry_status": "No"} ret = dic.pop("name") print(ret) # chenrun print(dic) # {'age': 13, 'sex': '男'} del dic["age"] print(dic) # {'sex': '男', 'marry_status': 'No'} # 随机删除 ret = dic.popitem() print(ret) # 清空字典中的所有内容 dic.clear()
3,修改
dic = {"name": "chenrun", "age": 13, "sex": "男", "marry_status": "No"} dic["name"] = "alex" print(dic) dic2 = {"name": "chenrun", "age": 33, "job": "teacher"} dic.update(dic2) print(dic) # {'name': 'chenrun', 'age': 33, 'sex': '男', 'marry_status': 'No', 'job': 'teacher'}
4, 查询
查询一般用"key"来查找具体的数据
dic = {"name": "chenrun", "age": 13, "sex": "男", "marry_status": "No"} print(dic["name"]) print(dic.get("age")) print(dic.get("alex")) # 返回None print(dic.get("alex", "查无此人")) # 可以设定默认的返回值
5,其他相关操作
dic = {"name": "chenrun", "age": 13, "sex": "男", "marry_status": "No"} print(dic.keys()) # dict_keys(['name', 'age', 'sex', 'marry_status']) for key in dic.keys(): print(key) print(dic.values()) # dict_values(['chenrun', 13, '男', 'No']) for value in dic.values(): print(value) print(dic.items()) # dict_items([('name', 'chenrun'), ('age', 13), ('sex', '男'), ('marry_status', 'No')]) for key,value in dic.items(): print(key, value) # 解构 a, b = 1, 2 print(a, b) # 解构的时候要注意数量必须要匹配
三,字典的嵌套
练习:
dic1 = {'name': ['alex', 2, 3, 5], 'job': 'teacher', 'oldboy': {'alex': ['python1', 'python2', 100]}} # 1,将name对应的列表追加一个元素’wusir’。 dic1.get("name").append("wusir") print(dic1) # 2,将name对应的列表中的alex首字母大写。 dic1.get("name")[0] = dic1.get("name")[0].capitalize() print(dic1) # 3,oldboy对应的字典加一个键值对’老男孩’,’linux’。 dic1['老男孩'] = 'linux' print(dic1) # 4,将oldboy对应的字典中的alex对应的列表中的python2删除 dic1.get("oldboy").get("alex").remove("python2") print(dic1)