# dict
'''
数据类型划分:可变数据类型,不可变数据类型
不可变数据类型:元组,bool,int,str 可哈希
可变数据类型:list,dict,set 不可哈希
dict :
key : 必须时不可变数据类型,可哈希,
value : 任意数据类型
dict 优点:
二分查找去查询
储存大量的关系型数据
dict 特点:
无序的
'''
# dic = {
# 'name':['张三','李四'],
# 'a':[
# {'age':12,'sex':1},
# {'age':16,'sex':2},
# ]
# }
#
# print(dic)
# dic1 = {'name':'zs','age':12,'sex':1}
# dic1['height'] = 999
# dic1['age'] = 55
# print(dic1)
# -------------------------------- 增 --------------------------------
dic1 = {'name':'zs','age':12,'sex':1,'height':555}
# 1 dic1['height'] = 222 # 直接添加 键(keys),值(values) 如果有的话 会覆盖
1 dic1['height'] = 222 # 有 键 会覆盖
2 print(dic1) # 打印结果:{'name': 'zs', 'age': 12, 'sex': 1, 'height': 222}
# 2 setdefault() # 有键 的话 不做任何改变,没有才添加
1 dic1.setdefault('weight')
2 print(dic1) # 打印结果:{'name': 'zs', 'age': 12, 'sex': 1, 'height': 222, 'weight': None}
3 # 没 value 默认为 None
#-------------------------------- 删 ---------------------------------
dic2 = {'name':'zs','age':12,'sex':1,'height':555}
# 1
# 01 pop() # 有返回值 ,按键去删除
1 dic2.pop('age')
2 print(dic2) #打印结果:{'name': 'zs', 'sex': 1, 'height': 555}
3
4 # 可以设置返回值 None 为返回值
5 print(dic2.pop('asd',None)) # 打印结果:None
# 02 popitem() 删除最后一个 有返回值:元组,删除的键值
1 # dic2.popitem()
2 # print(dic2) # 打印结果:{'name': 'zs', 'sex': 1}
3 # print(dic2.popitem()) # 打印结果:('sex', 1)
# 03 del
1 # del dic2['name']
2 # print(dic2) # 打印结果:{'sex': 1, 'height': 555}
3 #
4 # del dic2 # 直接删除 再次打印 就报错
5
6 # 04 clear() # 清空字典
7 # dic2.clear()
8 # print(dic2) # 打印结果:{}
# -------------------------------- 改 --------------------------------
dic3 = {'name':'zs','age':12,'sex':1,'height':555}
# 01 直接改
# 02 updata()
1 dic4 = {'name':'zs','age':12,'sex':1,'height':555}
2 dic5 = {'name':'ls','size':22}
3 dic4.update(dic5)
4 # 把 dic5 中的所有键值,更新到 dic4 中,有的就覆盖,没有的就添加 ,dic5 不变
5 print(dic4) # 打印结果:{'name': 'ls', 'age': 12, 'sex': 1, 'height': 555, 'size': 22}
6 print(dic5) # 打印结果:{'name': 'ls', 'size': 22}
# -------------------------------- 查 --------------------------------
# 1:kys() 2: values() 3:items()
dic6 = {'name':'zs','age':12,'sex':1,'height':555}
1 print(dic6.keys()) # 键 打印结果:dict_keys(['name', 'age', 'sex', 'height'])
2 print(dic6.values()) # 值 打印结果:dict_values(['zs', 12, 1, 555])
3 print(dic6.items()) # 键,值 打印结果:dict_items([('name', 'zs'), ('age', 12), ('sex', 1), ('height', 555)])
4 # 一个元组,列表中有多个列表,列表中对应多个键值
5 for i in dic6: #for i in dic6.keys():
6 print(i) # 打印的是 键
7
8 for i in dic6.values():
9 print(i) # 打印的是 值
10
11 for k,v in dic6.items():
12 print(k,v) # 打印的是 键,值
# 01 get() 查 键
1 print(dic6.get('meiyou')) # 打印:None
2 print(dic6.get('meiyou','没有这个键')) # 打印:没有这个键 (可自定义设置)
# ---------------面试题---------------------
# 用一行代码使 a,b 值互换
a = 1
b = 2
a,b = b,a
print(a,b) # 打印结果:2 1