一、字典的简单介绍
字典(dict)是python中唯一的一个映射类型。它是以{ } 括起来的键值对组成。在dict中key是唯一的。在保存的时候,根据key来计算出一个内存地址。然后将key-value保存在这个地址中,这种算法被称为hash算法。所以切记,在dict中存储的key-value中的key必须是可hash的。
暂时认为可hash的不可改变。
已知的可hash数据类型:int,str,tuple,bool
不可hash的数据类型:list, dict,set
语法:
{key1:value1,key2:value2,...}
1 # 合法 2 dic = {123: 456, True: 999, "id": 1, "name": ‘sylar‘, "age": 18, "stu": [‘帅 哥‘, ‘美?女女‘], (1, 2, 3): ‘麻花藤‘} 3 print(dic[123]) 4 print(dic[True]) 5 print(dic[‘id‘]) 6 print(dic[‘stu‘]) 7 print(dic[(1, 2, 3)]) 8 # 不不合法 9 # dic = {[1, 2, 3]: ‘周杰伦‘} # list是可变的. 不不能作为key 10 # dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不不能作为key 11 dic = {{1, 2, 3}: ‘呵呵呵‘} # set是可变的, 不不能作为key
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. 而hash表不是连续的. 所以不能进行切片工作. 它只能通过key来获取dict中的数据
二、字典的增删改查及其他相关操作
1.增加
1 dic={} 2 # dic[key]=value 3 dic[‘name‘] = "王力宏" 4 5 #如果dict中没有出现过某key-value,也可以通过setdefault增加 6 dic.setdefault("key") 7 dic.setdefault("周杰伦") #当只有key时,value为None 8 dic.setdefault("周杰伦","昆凌")#当dict中存在相应键值,setdefault无作用
2.删除
1 dic = {"id":3,"name":"林俊杰"} 2 #ret = dic.pop("id") #pop(key)会返还键对应的值 3 #print(dic) 4 #print(ret) 5 6 del dic["name"] 7 print(dic) 8 9 #随机删除 10 ret = dic.popitem() 11 12 #清空字典 13 dic.clear()
3.修改
1 dic = {"id": 1, "name": "王健林","money": 999999} 2 dic1= {"id":3, "喜欢的人":"王力宏"} 3 dic.update(dic1) 4 print(dic)
4.查询
1 dic = {"SA":"隐身刺客","TA":"圣堂刺客","NA":"暗夜刺客"} 2 print(dic["SA"]) 3 # print(dic["GA"]) #没有相应的key值,则报错 4 print(dic.get("GA")) #==> None 5 print(dic.get("GA","炼金术士")) # ==>炼金术士,给一个默认值,不是添加到dic里
5.其他相关操作
1 dic = {"王力宏":"爱的就是你","孙燕姿":"同类","周杰伦":"晴天"} 2 print(dic.keys()) #dict_keys([‘王力宏‘, ‘孙燕姿‘, ‘周杰伦‘]) 不是列表,可当成list来用 3 for key in dic.keys(): 4 print(key) 5 print(dic.values()) 6 for value in dic.values(): 7 print(value) 8 print(dic.items()) #dict_items([(‘王力宏‘, ‘爱的就是你‘), (‘孙燕姿‘, ‘同类‘), (‘周杰伦‘, ‘晴天‘)]) 9 for key,value in dic.items(): 10 print(key, value)
涉及知识:解构
a, b = 1, 2 print(a, b) # 1 2 e, f, g = [1, 2, 3] print(e,f,g) # 1 2 3
三、字典的嵌套
1 dic1 = { 2 "name": "汪峰", 3 "age": 38, 4 "wife": { 5 "name": ‘章子怡‘, 6 "age": 28 }, 7 "children": [‘第一个毛孩?子‘, ‘第二个毛孩?子‘], 8 "desc": ‘峰哥不会告我吧. 没关系. 我想上头条的‘ 9 } 10 11 print(dic1.get("wife").get("name"))
原文地址:https://www.cnblogs.com/listash/p/9273806.html
时间: 2024-10-10 11:11:58