"""
字典
!!! key : value 存储元素形式为键值对(k-v)
1.字典创建
-格式:{} | dict()
2.访问字典
!!!所谓操作字典,主要操作的是字典的键
-键唯一
-键无序
-底层是散列数组 + 链表 + 红黑树完成
3.字典的常用api
4.字典的遍历
5.生成字典
"""
#1. 创建空字典
dict1 = {}
print(dict1)
print(type(dict1)) #<class 'dict'>
dict2 = dict()
print(dict2)
print(type(dict2))
#2. 创建元素字典
dict3 = {"username":"zhangsan","password":"123","age":18, "salary":10000}#键-值对
print(dict3)
# 3.访问字典中的元素
# -通过中括号[键] -> 值
# print(dict[3]) # keyError : 1
print(dict["username"]) #zhangsan
# -get方法
print(dict3.get("username")) #zhangsan
#4.操作键改变值,键相同,则覆盖值,否则添加新的键-值对
dict3["username"] = "lisi"
dict3["location"] = "西安市"
print(dict3)
# 字典的常用api
#keys 获取所有的键
print(dict3.keys())
print(type(dict3.keys()))
#values 获取所有的v
print(dict3.values())
#items 获取所有的键-值对
print(dict3.items())
# 5.字典的遍历(获取/操作所有的元素值)
# -遍历所有的键
for key in dict3.keys():
print("键:",key,"--->","值:",dict3.get(key))
# -遍历所有的键第二种方式
for key in dict3:
print("键:",key,"--->","值:",dict3.get(key))
# -遍历所有的值
for value in dict3.values():
print(value)
# -pop 取出键对应的值,原字典发生改变
print("调用pop后的结果", dict3.pop("location"))
print(dict3)
#6.字典的生成
# -setdefault 设置一个默认的key,对应一个默认的值none
list_res = ["name","age","height"]
dict3.setdefault("height",197)
print(dict3)
# -zip()内置函数 strict参数为True时,列表1和列表2长度必须一致
res1 = ["name", "age", "height"]
res2 = ["zhangsan", 18, "200"]
dict5 = dict(zip(res1, res2))#把元素转换为字典并通过zip()函数按照索引一一拼接
# dict5 = dict(zip(res1, res2),strict = True)
print(dict5)