字典存储是一个一个的键值对(key:value); 字典也是无序的
1.定义字典
a.字典的每个元素都是键值对, 键:值
b.键可以是基本的数据类型,但是不能是容器类型.最好建议键用字符串(偶尔可以用整型)
dict1 = {'name':'hanbo', 'age':20, 1:2, True:'错', [1, 2]:'a', (3, 4):'c'} print(dict1) #报错
c.值可以是任何类型
dict2 = {'a':[1, 2],'b':(1, 2),'c':{1, 2}} print(dict2)
d.字典中键是唯一的
dict3 = {'name':'hanbo', 'age':20, 'name':'nihao'} print(dict3)
2.使用字典的元素的值(查找)
a.通过键去取值
dict4 = {'name':'hanbo', 'age':20} print(dict4['name']) print(dict4['QQ']) # 如果字典的键值对中没有对应的键,通过键去直接去取元素的值,结果会报错
b.通过调用get(key)也可以拿到键对应的值.当key不存在的时候,会返回None,而不会报错
dict5 = {'name':'hanbo', 'age':20} age = dict5.get('age') print(age) 总结:在确定key值一定存在的时候直接用字典名['key']的方式来取值 如果不确定key值在字典中,则用字典名.get('key')的方式来取值
3.修改字典中元素的值
a.通过字典加[]的方式去获取对应的值,然后重新赋值..用get方法是不行的.
dict6 = {'name':'hanbo', 'age':20} dict6['name'] = 'wangyan' print(dict6)
b.如果key不存在,就是给字典添加键值对
dict7 = {'name':'hanbo', 'age':20} dict7['sex'] = 'boy' print(dict7)
c.setdefault(key, value): 查找字典中是否有key对应的键值对,如果字典中没有这个key值就会添加到字典中.
dict8 = {'name':'hanbo', 'age':20} print(dict8.setdefault('like', '打球')) print(dict8)
d.字典1 update 字典2: 用字典2中的内容去更新字典1的内容.有键则更新,无键则添加.
dict10 = {'a':1, 'b':2} dict10.update({'c':10,'b':3}) print(dict10)
练习:设计字典保存人的信息(名字,年龄,性别,狗(名字,颜色,年龄),各科的成绩)
dict9 = { 'name':'hanbo', 'age':'20', 'sex':'boy', 'dog':{'name':'taidi', 'color':'yellow', 'age':'2'}, 'grade':{'math':90, 'chinese':88} } print(dict9) # 如果想拿到狗的颜色 print(dict9['dog']['color'])
4.字典的删除
a. del 字典名[key]
dict11 = {'a':1, 'b':2} del dict11['a'] print(dict11) # 在删除前判断键值是否存在. if 'a' in dict11: #用in \ not in去判断键值对是否存在,避免报错 print('存在') else: print('不存在')
b. 字典名.pop(key) : 取出对应的键值对,并且返回key对应的value, 删除前同样需要判断
dict12 = {'a':1, 'b':2, 'c':3} dict12.pop('a') print(dict12)
5.字典的遍历
a. 遍历用key去取字典中所有的key(建议用)
dict12 = {'a':1, 'b':2, 'c':3, 'd':[8, 9, 10]} for key in dict12: print(key) #取键 print(dict12[key]) #取值
b. items()函数将字典转换成列表进行遍历拿到键和值(不建议用,消耗内存)
dict12 = {'a':1, 'b':2, 'c':3, 'd':[8, 9, 10]} print(dict12.items()) for key,value in dict12.items(): print(key,value)
c. keys() 函数可以拿到字典所有的键
dict12 = {'a':1, 'b':2, 'c':3, 'd':[8, 9, 10]} print(list(dict12.keys()))
d. values()函数可以拿到字典索引的值
dict12 = {'a':1, 'b':2, 'c':3, 'd':[8, 9, 10]} print(list(dict12.values()))
.
total_students = { 20180001:{'name':'韩波', 'age':22, 'place':'四川', 'contact':{'name':'王艳', 'tel':17721967655}}, 20180002:{'name':'小明', 'age':21, 'place':'重庆', 'contact':{'name':'阿明', 'tel':17734578754}}, 20180003:{'name':'大黄', 'age':19, 'place':'北京', 'contact':{'name':'阿黄', 'tel':17723454387}}, 20180004:{'name':'小红', 'age':20, 'place':'上海', 'contact':{'name':'阿黄', 'tel':17734432347}}, 20180005:{'name':'大花', 'age':26, 'place':'广州', 'contact':{'name':'阿花', 'tel':17722341234}}, } (1)假设学号是20180002 studentId = 20180002 student = total_students.get(studentId) #通过调用get拿到学生 if student == None: print("没有该学生") else: contact_name = student['contact']['name'] contact_tel = student['contact']['tel'] print("该学生的联系人是:%s 电话:%s" % (contact_name, contact_tel)) (2)假设查找韩波 name = '韩波' has_thieOne = False #处理产找的姓名不存在时 for studentId in total_students: student = total_students[studentId] if student['name'] == name: print('%s的联系人是%s' % (name, student['contact']['name'])) has_thieOne = True if has_thieOne == False: print("%s不存在"%name)