9.30
今日内容
1.字典相关操作
2.元组相关操作
3.集合相关操作
4.字符编码理论
5.字符编码实操
1.字典相关操作
1.类型转换
dict()
字典的转换一般不使用关键字 而是自己动手转
2.字典必须要掌握的操作
user_dict = {
'username': 'jason',
'password': 123,
'hobby': ['read', 'music', 'run']
}
# 1.按k取值(不推荐使用)
# print(user_dict['username']) # jason
# print(user_dict['phone']) # k不存在会直接报错
# 2.按内置方法get取值(推荐使用)
# print(user_dict.get('username')) # jason
# print(user_dict.get('age')) # None
# print(user_dict.get('username', '没有哟 嘿嘿嘿')) # jason 键存在的情况下获取对应的值
# print(user_dict.get('phone', '没有哟 嘿嘿嘿')) # 键不存在默认返回None 可以通过第二个参数自定义
# 3.修改值数据
# print(id(user_dict))
# user_dict['username'] = 'tony' # 键存在则修改对应的值
# print(id(user_dict))
# print(user_dict)
# 4.新增键值对
# user_dict['age'] = 18 # 键不存在则新增键值对
# print(user_dict)
# 5.删除数据
# del user_dict['username']
# print(user_dict)
# res = user_dict.pop('password')
# print(user_dict)
# print(res) # 123
# 6.统计字典中键值对的个数
# print(len(user_dict)) # 3
# 7.字典三剑客
# print(user_dict.keys()) # 一次性获取字典所有的键 dict_keys(['username', 'password', 'hobby'])
# print(user_dict.values()) # 一次性获取字典所有的值 dict_values(['jason', 123, ['read', 'music', 'run']])
# print(user_dict.items()) # 一次性获取字典的键值对数据 dict_items([('username', 'jason'), ('password', 123), ('hobby', ['read', 'music', 'run'])])
# for i in user_dict.items():
# k, v = i
# print(k, v)
# 8.补充说明
# print(dict.fromkeys(['name', 'pwd', 'hobby'], 123)) # 快速生成值相同的字典
# res = dict.fromkeys(['name', 'pwd', 'hobby'], [])
# print(res) # {'name': [], 'pwd': [], 'hobby': []}
# res['name'].append('jason')
# res['pwd'].append(123)
# res['hobby'].append('study')
# print(res)
'''当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有'''
# res = user_dict.setdefault('username','tony')
# print(user_dict, res) # 键存在则不修改 结果是键对应的值
# res = user_dict.setdefault('age',123)
# print(user_dict, res) # 存不存在则新增键值对 结果是新增的值
user_dict.popitem() # 弹出键值对 后进先出
2.元组相关操作
1.类型转换
tuple()
ps:支持for循环的数据类型都可以转成元组
2.元组必须掌握的方法
t1=(11,22,33,44,55,66)
# 1.索引取值
# 2.切片操作
# 3.间隔、方向
# 4.统计元组内数据值的个数
# print(len(t1)) # 6
# 5.统计元组内某个数据值出现的次数
# print(t1.count(11))
# 6.统计元组内指定数据值的索引值
# print(t1.index(22))
# 7.元组内如果只有一个数据值那么逗号不能少
# 8.元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
# 9.元组不能新增或删除数据
3.集合相关操作
1.类型转换
set()
集合内数据必须是不可变类型(整型 浮点型 字符串 元组)
集合内数据也是无序的 没有索引的概念
2.集合需要掌握的方法
去重
关系运算
ps:只有遇到上述两种需求的时候才应该考虑使用集合
3.去重
s1 = {11, 22, 11, 22, 22, 11, 222, 11, 22, 33, 22}
l1 = [11, 22, 33, 22, 11, 22, 33, 22, 11, 22, 33, 22]
s1 = set(l1)
l1 = list(s1)
print(l1)
'''集合的去重无法保留原先数据的排列顺序'''
4.关系运算
群体之间做差异化校验
eg: 两个微信账户之间 有不同的好友 有相同的好友
f1 = {'jason', 'tony', 'jerry', 'oscar'} # 用户1的好友列表
f2 = {'jack', 'jason', 'tom', 'tony'} # 用户2的好友列表
# 1.求两个人的共同好友
# print(f1 & f2) # {'jason', 'tony'}
# 2.求用户1独有的好友
# print(f1 - f2) # {'jerry', 'oscar'}
# 3.求两个人所有的好友
# print(f1 | f2) # {'jason', 'jack', 'tom', 'tony', 'oscar', 'jerry'}
# 4.求两个人各自独有的好友
# print(f1 ^ f2) # {'oscar', 'tom', 'jack', 'jerry'}
# 5.父集 子集
print(f1 > f2)
print(f1 < f2)
4.字符编码理论
1.字符编码只针对文本数据
2.回忆计算机内部存储数据的本质
3.既然计算机内部只认识01,为什么我们却可以敲出人类各式各样的字符
字符编码本:存储一个数字和字符对应关系的地方
4.字符编码发展史
1.一家独大
计算机是由美国人发明的 为了能够让计算机识别英文
需要发明一个数字跟英文字母的对应关系
ASCII码:记录了英文字母跟数字的对应关系
用8bit(1字节)来表示一个英文字符
2.群雄并起
中国人 GBK码:记录了英文、中文与数字的对应关系
用至少16bit(2字节)来表示一个中文字符
很多生僻字还需要使用更多的字节
英文还是用8bit(1字节)来表示
日本人 shift_JIS码:记录了英文、日文与数字的对应关系
韩国人 Euc_kr码:记录了英文、韩文与数字的对应关系
ps:每个国家的计算机使用的都是自己定制的编码本
不同国家的文本数据无法直接交互 会出现"乱码"
3.天下一统 unicode万国码
兼容所有国家语言字符
起步就是两个字节来表示字符
utf系列:utf8 utf16 ...
专门用于优化unocide存储问题
英文还是采用一个字节 中文三个字节
5.字符编码实操
1.针对乱码不要慌 切换编码慢慢试即可
2.编码与解码
编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
字符串.encode()
解码:将计算机能够读懂的数据按照指定的编码解码成人能够读懂
bytes类型数据.decode()
3.python2与python3差异
python2默认的编码是ASCII
1.文件头
# encoding:utf8
2.字符串前面加u
u'你好啊'
python3默认的编码是utf系列(unicode)
作业
1.去重下列列表并保留数据值原来的顺序
eg: [1,2,3,2,1] 去重之后 [1,2,3]
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
#l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
#s1 = set(l1)
#l1 = list(s1)
#print(l1)
2.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
linuxs={'kermit','tony','gangdan'}
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
#pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
#linuxs = {'kermit', 'tony', 'gangdan'}
#s1 = pythons & linuxs
#print(s1)
#s2 = pythons | linuxs
#print(s2)
#s3 = pythons - linuxs
#print(s3)
#s4 = pythons ^ linuxs
#print(s4)
3.统计列表中每个数据值出现的次数并组织成字典战士
eg: l1 = ['jason','jason','kevin','oscar']
结果:{'jason':2,'kevin':1,'oscar':1}
真实数据
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
#l1 = ['jason', 'jason', 'kevin', 'oscar', 'kevin', 'tony', 'kevin']
#dic = {}
#for i in l1:
#dic[i] = t1.count(i)
#print(dic)
4.优化员工管理系统 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户
#admin = {'admin': 'admin', 'jack': 'jack'}
#admin_name = input('请输入管理员账号:').strip()
#admin_pwd = input('请输入管理员密码:').strip()
#if admin_name in admin and admin_pwd == admin[admin_name]:
#print('登陆成功,欢迎使用员工账号管理系统')
#name_list = {}
#while True:
#print(''' ------------
#1.添加用户
#2.查看所有用户
#3.删除指定用户
#4.修改用户密码
#5.退出系统
#------------''')
#num = input('请输入对应功能的数字:').strip()
#if num.isdigit():
#if num == '5':
#print('欢迎下次使用')
#break
#elif num == '1':
#add = input('请输入您要添加的姓名:').strip()
#if add in name_list:
#print('已存在该用户')
#else:
#password = input('请设置密码:')
#name_list[add] = password
#elif num == '2':
#if len(name_list) == 0:
#print('没有用户')
#else:
#for i in name_list:
#print(f'用户:{i}')
#elif num == '3':
#def_name = input('请输入您要删除的姓名:').strip()
#if def_name not in name_list:
#print('没有该用户')
#else:
#name_list.pop(def_name)
#print('删除成功')
#elif num == '4':
#change_name = input('请输入要修改的用户:').strip()
#if change_name in name_list:
#change_pwd = input('请输入新密码')
#if change_pwd == name_list[change_name]:
#print('新密码与旧密码相同,请再次尝试')
#else:
#name_list[change_name] = change_pwd
#print(f'用户{change_name}密码修改成功')
#else:
#print('没有该用户')
#else:
#print('请输入对应的数字')
#else:
#print('请输入数字')
#else:
#print('管理员账号或密码错误')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性