python基础 - 10 容器类型 - 字典

字典: dict { }

字典存储是一个一个的键值对(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()))

练习: 用一个字典去存储学生的信息,包括学号,姓名,年龄,籍贯,联系人基本信息(姓名,电话号码)(1)通过学号查学生信息(查联系人的名字和电话)(2)通过学生姓名去查联系人信息 .
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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值