8 字典
1 字典定义
- 1.1 字典的定义
dict1 = {} # 空字典 dict2 = dict() # 空字典 list1 = list() 空列表 tuple1= tuple() 空元组 dict3 = {"key1": "value1", "key2": "value2", ... ...}
- 1.2 列表 元组向字典转换
""" list可以转成字典 但是前提:列表中元素都要成对出现 tuple可以转成字典 但是前提:元组中元素都要成对出现 """ list1 = [('name', 'lucky'), ('age', 18)] dict1 = dict(list1) print(dict1) # {'name': 'lucky', 'age': 18} tuple1 = (('name', 'lucky'), ('age', 18)) dict2 = dict(tuple1) print(dict2) # {'name': 'lucky', 'age': 18}
- 1.3 字典的in not in方法
dict2 = {'张三': 100, '李四': 80, '王五': 89, '赵柳': 99} print('张三' in dict2) # True 判断 张三 在不在dict2的keys中 print('张柳' in dict2) # False
2 字典的增删改查
- 2.1 字典的增 改
""" 增加: 格式:dict6[key]=value 特点: 按照上面的格式,如果在字典中存在同名的key,则发生值的覆盖(后面的值覆盖原来的)。 如果没有同名的key,则实现的添加功能(key:value添加到字典中) """ dict1 = {} dict1['brand'] = 'mi' print(dict1) # {'brand': 'mi'} dict1['brand'] = 'huawei' print(dict1) # {'brand': 'huawei'} dict1['type'] = 'p30 pro' dict1['price'] = 9000 dict1['color'] = '黑色' print(dict1) # {'brand': 'huawei', 'type': 'p30 pro', 'price': 9000, 'color': '黑色'}
- 2.2 字典的查功能
# 1. 根据key获取值,如果key在字典中存在则报出对应的值 dict2 = {'张三': 100, '李四': 80, '王五': 89, '赵柳': 99} print(dict2["张三"]) # 100 # 2. 根据key获取值,如果key在字典中没有存在则报出keyError dict2 = {'张三': 100, '李四': 80, '王五': 89, '赵柳': 99} print(dict2["张三2"]) # KeyError: '张三2' # 3. 根据key获取值,如果key在字典中不存在,也不报错的方法 dict2 = {'张三': 100, '李四': 80, '王五': 89, '赵柳': 99} result = dict2.get("张三2") print(result) # None # 4. 根据key获取值,如果key在字典中不存在,也不报错返回默认值 dict2 = {'张三': 100, '李四': 80, '王五': 89, '赵柳': 99} result = dict2.get("张三2", 99) print(result) # 99
- 2.3 字典的删功能
""" 1, del dict[key] key存在时:删除对应的键值对 key不存在时:报错 KeyError: '王五8' """ dict1 = {'张三': 100, '李四': 100, '王五': 89, '赵柳': 99} del dict1['王五'] print(dict1) # {'张三': 100, '李四': 100, '赵柳': 99} del dict1['王五8'] print(dict1) # 报错 KeyError: '王五8' """ 2, dict.pop(key[, default]) dict1.remove(key) ----> 不存在 报错没有remove函数 pop(key[,default]) ----> 根据key删除字典中的键值对,返回值是 只要删除成功,则返回键值对的值value pop的默认值,往往是在删除的时候没有找到对应的key,则返回default默认值 """ dict1 = {'张三': 100, '李四': 100, '王五': 89, '赵柳': 99} result = dict1.pop('李四') print(result) # 100 print(dict1) # {'张三': 100, '王五': 89, '赵柳': 99} dict1 = {'张三': 100, '李四': 100, '王五': 89, '赵柳': 99} result = dict1.pop('李四8', "字典中没有此键") print(result) # 字典中没有此键 print(dict1) # {'张三': 100, '李四': 100, '王五': 89, '赵柳': 99} """ 3, dict.popitem() 随机删除字典中键值对(一般是从末尾删除元素) """ dict1 = {'张三': 100, '李四': 100, '王五': 89, '赵柳': 99} result = dict1.popitem() print(result) # ('赵柳', 99) print(dict1) # {'张三': 100, '李四': 100, '王五': 89} """ 4, dict.clear() 同列表的clear() """ dict1 = {'张三': 100, '李四': 100, '王五': 89, '赵柳': 99} dict1.clear() print(dict1) # {}
- 2.4 字典的其他内置函数:
''' 1, update()合并操作 {}+{} 报错,没有 + 操作 ''' dict1= {0: 'tom', 1: 'jack', 2: 'lucy'} dict2 = {0: 'lily', '4': 'ruby'} dict1.update(dict2) print(dict1) # {0: 'lily', 1: 'jack', 2: 'lucy', '4': 'ruby'} ''' 2, fromkeys(seq,[default]) ---->将seq转成字典的形式 如果没有指定默认的value则用None new_dict = dict.fromkeys(list1)---》 {'aa': None, 'bb': None, 'cc': None} ---> 如果指定default,则用default替代None这个value值 new_dict = dict.fromkeys(list1,10) ---》{'aa': 10, 'bb': 10, 'cc': 10} ''' list1 = ['aa', 'bb', 'cc'] new_dict = dict.fromkeys(list1) print(new_dict) # {'aa': None, 'bb': None, 'cc': None} list1 = ['aa', 'bb', 'cc'] new_dict = dict.fromkeys(list1, 20) print(new_dict) # {'aa': 20, 'bb': 20, 'cc': 20}
3 字典的遍历
-
3.1 遍历的函数用法
""" 1,字典中没有下标,无法根据索引查值 2,字典里面的函数:items() values() keys() 3, for i in dict:遍历的是字典key 4, keys() 获取字典中的所有key键 (键值对) 5, values() 取出字典中所有值,保存到列表中 """ dict2 = {'张三': 100, '李四': 100, '王五': 89, '赵柳': 99} for i in dict2: print(i) # 张三 李四 王五 赵柳 print(dict2.items()) # [('张三', 100), ('李四', 100), ('王五', 89), ('赵柳', 99)] print(dict2.keys()) # ['张三', '李四', '王五', '赵柳'] print(dict2.values()) # [100, 100, 89, 99])
-
3.2 案例 - 求所有学生平均分以及大于平均分的姓名
dict2 = {'张三': 100, '李四': 80, '王五': 89, '赵柳': 99} scores = dict2.values() sum_score = sum(scores) avg = sum_score/len(scores) print(avg) # 平均分 92.0 for key, value in dict2.items(): if value > avg: print(key) # 张三 赵柳
4 字典的作业
"""
案例:用户注册功能
1,username
2,password(需要二次验证密码)
3,email(需要验证邮箱格式,qq.com 126.com)
4,phone
5,退出or继续注册
"""
database = []
while True:
user = {}
username = input("请输入用户名:")
user["username"] = username
password = input("请输入用户密码:")
second_password = input("请再次确认密码:")
if second_password != password:
print("两次密码输入不一致")
continue
else:
user["password"] = password
email = input("请输入邮箱:")
if (not email.endswith("qq.com")) and (not email.endswith("126.com")):
print("邮箱格式错误,请输入qq或126邮箱")
continue
else:
user["email"] = email
phone = input("请输入手机号码:")
if len(phone) != 11:
print("手机号码长度不对")
continue
else:
user["phone"] = phone
database.append(user)
y_n = input("是否继续注册y/n:")
if y_n == "n":
break
print(database)