数据类型的内置方法及字符编码理论

字典相关操作

1类型转换

​ dict()

​ 字段转换一般不使用关键字,而是自己编写代码进行转化

2字典掌握的方法
user = {
    'name':'zhangsan',
    'age': 18,
    'like':['ball','music','xiaoji']
}
print(user['name'])#zhangsan
print(user['aaa'])# zhi接报错
print(user.get('name'))#zhangsan
print(user.get('aaa'))#如果不存在k键就会返回None
print(user.get('aaa','111'))#如果不存在k键就会返回111
#3修改值的数据
user['name']='lisi'#将name的值替换成list
#4新增键值对
user['sex']='boy'#添加{'sex':'boy'}
#5删除数据
del user['name']
a1=user.pop('age')
print(a1)#就会弹出age:18数据值
#6统计字典中键值对的个数
print(len(user))#会输出user的键值个数
#7字典三剑客
#用。keys方法一次性输出所有的键
print(user.keys())#一次性输出字典的所有的键
#用.value一次性输出所有值
print(user.value())#一次性输出所有值
#用。items()方法一次性获取字典中所有的键值对
print(user.items())#一次性获取字典的所有值dict_items([('name', 'zhangsan'), ('age', 18), ('like', ['ball', 'music', 'xiaoji'])])
for k,v in user():
#就等于
for i in user():
    k,v=i
#8补充说明
user1={}
print(user1.fromkeys(['name','age','hobby'],(123)))#{'name': 123, 'age': 123, 'hobby': 123}
print(user1.fromkeys(['name','age','hobby'],[])#{'name': [], 'age': [], 'hobby': []}
user1['name'].append('jason')
user1['pwd'].append(10)
user1['hobby'].append('sing')
print(user1)
#{'name': ['jason', 10, 'sing'], 'pwd': ['jason', 10, 'sing'], 'hobby': ['jason', 10, 'sing']}
# 键存在则不修改 结果是键对应的值
print(res)  # {'name': [], 'pwd': [], 'hobby': []}
res = user_dict.setdefault('username','tony')
	print(user_dict, res)     
    # jason', 'password': 123, 'hobby': ['read', 'music', 'run']} jason
# 存不存在则新增键值对 结果是新增的值
res = user_dict.setdefault('age',123)
	print(user_dict, res)  
    # jason', 'password': 123, 'hobby': ['read', 'music', 'run'], 'age': 123} 123

元组相关操作

1类型转换

tuple()
支持for循环的数据类型都可以转换为元组

2元组必须掌握的方法

	 t1 = (11, 22, 33, 44, 55, 66)
print(l1[2])# 1.索引取值
print(l1[2:4])# 2.切片操作
print(l1[0:5:2])# 3.间隔、方向
print(len(t1))  # 6    # 4.统计元组内数据值的个数
print(t1.count(11))# 5.统计元组内某个数据值出现的次数
print(t1.index(22))# 6.统计元组内指定数据值的索引值
 # 7.元组内如果只有一个数据值那么逗号不能少
# 8.元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
#可变的:列表、集合、字典
#不可变的:数字、字符串、元组
# 9.元组不能新增或删除数据

内置方法之集合相关操作

set()
集合内数据必须是不可变类型(整型 浮点型 字符串 元组)
集合内数据也是无序的 没有索引的概念1类型转换
去重
去除集合内重复的数据值

    l2 = {11, 33, 44, 88, 99}
    l1 = set(l2)
    l2 = list(l1)
    print(l2)      # [33, 99, 88, 11, 44]
关系运算
&    共同的部分
-    独有的部分
|    全部的部分(和)
^    独有部分的和
eg:
 l1 = {11, 22, 33, 44, 55, 66} 
 l2 = {11, 33, 44, 88, 99}
  print(l1 & l2)  # 两个共同的数字
  print(l1 - l2)  # l1独有的数字
  print(l1 | l2)  # 两个共同的数字
  print(l1 ^ l2)  # 两个各自独有的数字
父级,子集
<   或者   >

字符编码理论

1.字符编码只针对文本数据
2.计算机存储数据的本质是二进制,因为计算机只认识0和1,在和计算机交互的时候,用的是我们能够读懂的语言
3.字符编码的发展史:
一家独大
      计算机是美国人发明的,由于计算机值认识0和1,于是定义了字符编码,但是只记录了英文字符与数字之间的对应关系,于是有了ASCII码,内部只记录英文字符和数字之间的对应关系
群雄割据
       越来越多国家使用计算机之后,各个国家都开发了属于自己国家的字符编码
    中国:GBK编码,内部记录了中文字符,英文字符,和数字之间的对应关系,2bytes起步存储中文
    韩国:Euc_kr码,内部记录了韩文字符、英文字符与数字之间的对应关系。
    日本:shift_JTS码,内部记录了日文字符、英文字符与数字之间的对应关系。
.万国码:unicode,兼容各个国家的字符。原有的字符全部使用2bytes起步存储。
UTF家族,是针对unicode的优化版本,常用的是utf-8。英文1bytes存储,其它统一3bytes存储字符。
内存使用的是Unicode,硬盘使用utf8。
编码与解码
  编码:将人类可以读懂的字符按照指定的编码形式转换成计算机能够读懂的语言(数字)。简记:人类的字符转换成计算机的字符。关键字:encode.
   解码:将计算机能够读懂的语言按照指定的编码形式转换为人可以独懂得字符,关键字:decode

字符编码实操

1.针对乱码切换编码即可
2.编码与解码
	编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
        字符串.encode()
 	解码:将计算机能够读懂的数据按照指定的编码解码成人能够读懂
        bytes类型数据.decode()
3.python2与python3差异
	python2默认的编码是ASCII
		1.文件头
        	# encoding:utf8
    	2.字符串前面加u
        	u'你好啊'
 	python3默认的编码是utf系列(unicode)

作业

1"""利用列表编写一个员工姓名管理系统
    输入1执行添加用户名功能
    输入2执行查看所有用户名功能
    输入3执行删除指定用户名功能
拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名
"""
from filecmp import cmp

user = {}
a = 1
while a:
    print(
        """输入1执行添加用户名功能
    输入2执行查看所有用户名功能
    输入3执行删除指定用户名功能
    输入4执行用户名登录功能""")
    gongneng = input('输入指令>>>>')
    if gongneng == '1':
        name = input("输入用户名").strip()
        password = input("输入密码")
        user.setdefault(name, password)
        print('添加成功')
    if gongneng == '2':
        for i in user.keys():
            print('用户名:' + i)
    if gongneng == '3':
        deluser = input('想要删除的用户')
        del user[deluser]
        print('删除成功')
    if gongneng == '4':
        name = input("输入用户名").strip()
        password = input("输入密码")
        koy={}
        koy.setdefault(name,password)

        if koy.items() <= user.items():
            print('登陆成功')
        else:
            print('登录失败')
2.# 去重下列列表并保留数据值原来的顺序
# 	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]

a = [1, 2, 3, 2, 1]
a = sorted(set(a),key=a.index)
print(a)


#方法1用sorted语法 不改变列表原来的方法 (列表,key=顺序这了用的是l1列表的索引顺序)
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
a= sorted(set(l1),key=l1.index)
print(a)
#方法2使用sort()中的字段进行设定
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
a = list(set(l1))#利用集合去重
a.sort(key=l1.index)#根据l1列表进行排序
print(a)

3#有如下两个集合,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'}
# 1. 求出即报名python又报名linux课程的学员名字集合
print(pythons & linuxs)
#2. 求出所有报名的学生名字集合
print(pythons | linuxs)
#3. 求出只报名python课程的学员名字
print(pythons - linuxs)
#4. 求出没有同时这两门课程的学员名字集合
print(pythons ^ linuxs)
4.# 统计列表中每个数据值出现的次数并组织成字典战士
# 	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']
# n1=[]
# listn={}
# a=list(set(l1))
# a.sort(key=l1.index)
# for i in a:
#     n1.append(l1.count(i))
# an1=list(zip(a,n1))
# listn=dict(an1)
# print(listn)
#方法1
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
n1=[]
listn={}
a=list(set(l1))
a.sort(key=l1.index)
for i in a:
    n1.append(l1.count(i))
an1=list(zip(a,n1))
listn=dict(an1)
print(listn)
#方法2
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
a={}
for i in l1:
    a[i]=l1.count(i)
print(a)








posted @ 2022-09-30 17:43  冰柠檬檬  阅读(46)  评论(0)    收藏  举报