'''
字典,是“键值对”的无序可变序列,字典中的每个元素都是一对“键值对”,包含:“键对象”
和“值对象”,可以通过“键对象”实现快速获取、删除、更新对象的“值对象”。
字典中通过“键对象”找到相应的“值对象”,列表中通过“下标数字”找到对象,键
是任意的不可变数据,比如整数、浮点数、字符串、元组,但是列表、字典、集合这些对象可变
不能作为“键”,并且“键”不可重复。
字典的定义方式:a={"name":"sj","age":36,"job":"teacher"}
'''
#一、字典的创建
#1、通过{}大括号,dict()来创建
a={"name":"sj","age":36,"job":"teacher"}
print(a)
b=dict(name="sj",age=36,job="teacher") #利用元组
print(b)
c=dict([("name","age"),("sj","36")]) #利用列表
print(c)
d={} #空字典
e=dict() #空字典
#2、通过zip()创建字典对象
a=['name','age','job']
b=['sj','36','teacher']
c=dict(zip(a,b))
print(c)
#3、通过fromkeys创建值为空的字典
a=dict.fromkeys(['name','age','job']) #fromkeys 元素为列表
print(a)
#二、字典元素的访问
a={"name":"sj","age":36,"job":"teacher"}
#1、通过[键]获得值,若[键]不存在,则报错
print(a["name"])
#print(a["sex"]),则报错,因为在a字典中没有“sex”这个键
#2、通过get()方法获得值,推荐使用,优点是指定键不存在,返回None,页可以指定键不存在时返回默认的对象
print(a.get("name"))
print(a.get("sex","男生"))
#3、列出所有键值对,items()
print(a.items())
#4、列出所有键,所有值 keys()、values()
print(a.keys())
print(a.values())
#5、len()返回键值对的个数
print(len(a))
#6、检测一个键是否在字典中 in
print("name" in a) #返回布尔值
#三、字典元素的添加、修改、删除
#1、新增键值对,如果键已经存在,则覆盖之前的键值对,如不存在,则新增
a={"name":"sj","age":36,"job":"teacher"}
a["address"]="徐州" #新增一个键值对
print(a)
a["age"]=18 #覆盖之前的键值对
print(a)
#2、使用update(),讲新字典中所有键值对全部添加到旧字典对象上,如键有重复直接覆盖
a={"name":"sj","age":36,"job":"teacher"}
b={"sex":"男","age":"18"}
a.update(b)
print(a)
#3、字典元素的删除 del(指定键值对)和clear()(全部删除)、pop()删除指定键值对,并将删除的值赋给新对象
a={"name":"sj","age":36,"job":"teacher"}
del(a["name"]) #删除键值对name:sj
print(a)
a.clear()
print(a)
a={"name":"sj","age":36,"job":"teacher"}
b=a.pop('age')
print(a)
print(b)
#4、popitem(),随机删除和返回该键值对
'''
字典是无序可变序列,因此没有第一和最后一个元素的概念,popitem()弹出随机的项,若想
一个一个的移除并处理,这个方法非常有效,因为不用首先获得键的列表
'''
a={"name":"sj","age":36,"job":"teacher"}
a.popitem() #随机删除一个键值对
print(a)
#四、序列解包
'''
序列解包可以用于元组、列表、字典,可以让我们方便的对多个变量赋值
序列解包用于字典时,默认是对键进行操作,如果需要对键值对操作,则需要使用items()
如果需要对值操作,则需要使用values()
'''
a,b,c=1,2,3 #数字解包
(d,e,f)=(4,5,6) #元组解包
[g,h,i]=[7,8,9] #列表解包
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
print(i)
a={"name":"sj","age":36,"job":"teacher"}
x,y,z=a
print(x) #x为name,默认对键的操作
print(y) #y为age
print(z) #z为job
x,y,z=a.items()
print(x) #对键值对操作
print(y)
print(z)
x,y,z=a.values()
print(x) #对值对操作
print(y)
print(z)
#五、复杂表格数据存储,并实现访问
'''
姓名 年龄 薪资 城市
张三 25 10000 徐州
李四 27 12000 上海
王五 30 15000 深圳
'''
r1={"name":"张三","age":"25","salary":"10000","city":"徐州"}
r2={"name":"李四","age":"27","salary":"12000","city":"上海"}
r3={"name":"王五","age":"30","salary":"15000","city":"深圳"}
tb=[r1,r2,r3] #制表
print(tb)
print(tb[1].get("salary"))#获得第二行salary
for x in range(len(tb)): #for语句结束要带冒号
print(tb[x].get("salary"))#获得所有人的slary
for x in range(len(tb)):
print(tb[x].get("name"),tb[x].get("age"),tb[x].get("salary"),tb[x].get("city"),)