基本数据类型(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]) #int型 4 print(dic[True]) #bool型 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.增加
dic={}
# dic[key]=value
dic['name'] = "魏嘉"
dic['school'] = "石家庄铁道大学"
print(dic)
#此种添加方法通俗易懂,可以添加无限组键值对到字典里面
dic.setdefault("key")
print(dic)
dic.setdefault("周杰伦") #当只有key时,value为None
print(dic)
dic.setdefault("周杰伦", "昆凌")#当dict中存在相应键值,setdefault无作用
print(dic)
dic.setdefault("小冰", "农大")
print(dic)
#一次最多添加一组键值对,否则报错
输出结果:
{'name': '魏嘉', 'school': '石家庄铁道大学'}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None, '周杰伦': None}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None, '周杰伦': None}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None, '周杰伦': None, '小冰': '农大'}
2.删除
dic = {"id": 3, "name": "林俊杰", "school": "石家庄铁道大学", "location": "王岗"}
ret = dic.pop("id") #pop(key)会删除括号内对应的键值对,同时返还键对应的值
print(dic)
print(ret)
del dic["name"]
print(dic)
#随机删除
ret = dic.popitem() #这个随机删除也是删除括号内对应的键值对,同时返还键对应的值。但是随机删除
print(ret)
print(dic)
#清空字典
dic.clear()
print(dic)
#删除字典
del dic
print(dic)
输出结果:
{'name': '林俊杰', 'school': '石家庄铁道大学', 'location': '王岗'}
3
{'school': '石家庄铁道大学', 'location': '王岗'}
('location', '王岗')
{'school': '石家庄铁道大学'}
{}
3.修改
dic = {"id": 1, "name": "王健林", "money": 999999}
dic["id"] = 88 #最简单的修改方法
print(dic)
dic["歌手"] = "邓紫棋"
print(dic)
dic1 = {"id": 3, "喜欢的人": "王力宏", "money": 100}
dic.update(dic1) #另一种方法update
print(dic)
输出结果:
{'id': 88, 'name': '王健林', 'money': 999999}
{'id': 88, 'name': '王健林', 'money': 999999, '歌手': '邓紫棋'}
{'id': 3, 'name': '王健林', 'money': 100, '歌手': '邓紫棋', '喜欢的人': '王力宏'}
4.查询
dic = {"SA": "隐身刺客", "TA": "圣堂刺客", "NA": "暗夜刺客"}
print(dic["SA"])
print(dic["TA"]) #只能一次得到一个值
# print(dic["GA"]) #没有相应的key值,则报错
print(dic.get("GA")) #==> None
print(dic.get("GA", "炼金术士")) # ==>炼金术士,给一个默认值,不是添加到dic里
print(dic.get("NA")) #只能一次得到一个值
print(dic.get("NA", "TA"))
输出结果:
隐身刺客
圣堂刺客
None
炼金术士
暗夜刺客
暗夜刺客
5.其他相关操作
dic = {"王力宏":"爱的就是你","孙燕姿":"同类","周杰伦":"晴天"}
print(dic.keys()) #dict_keys(['王力宏', '孙燕姿', '周杰伦']) 不是列表,可当成list来用
for key in dic.keys():
print(key)
print(dic.values())
for value in dic.values():
print(value)
print(dic.items()) #dict_items([('王力宏', '爱的就是你'), ('孙燕姿', '同类'), ('周杰伦', '晴天')])
for key,value in dic.items():
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 = { "name": "汪峰", "age": 38, "wife": { "name": '章子怡', "age": 28 }, "children": ['第一个毛孩⼦子', '第二个毛孩⼦子'], "desc": '峰哥不会告我吧. 没关系. 我想上头条的' } print(dic1.get("wife").get("name"))
浙公网安备 33010602011771号