进入python的世界_day8_python基础——字典、元组、合集的内置方法、编码的介绍
写在开头,昨天学了一些数据类型的内置使用方法,比如整形、浮点型、字符串、列表,今天学字典、元组、集合的常用内置方法,布尔值是没有所谓的内置方法的,还学了字符编码
一、字典内置方法的操作
-
先来个混序大杂烩,看能不能一眼就认出这些单词的意思:
len、key、pop、del、get、dict、values....
-
类型转换
.dict() 基本用不上,太苛刻,经常是不转还方便写
-
取值
.get( K ) 记这个方法,K存不存在都可以运行,可以很好的取字典的值,如果用老的索引按K取值如果K不存在就会报错!!!
tt = {'name':'nike', 'city':'shangsha'} print(tt.get('name') >>> nike -
取不到送给你
.get( K, D) 如果K这个索引找不到,程序会把D还给你,相当于给一个反馈
tt = {'name':'nike', 'city':'shangsha', 'hobby':'dance'} print(tt.get('age', '找不到输入的参数')) >>> 找不到输入的参数 -
修改键值对
[K]= '新的数据值' 如果K存在,那就改这个存在的K如果K不存在,那就添加一个键值对到字典里面去
tt = {'name':'nike', 'city':'shangsha', 'hobby':'dance'} tt['hobby'] = 'music' print(tt) >>> {'name': 'nike', 'city': 'shangsha', 'hobby': 'music'} ________________________________ tt = {'name':'nike', 'city':'shangsha', 'hobby':'dance'} tt['age'] = '99' print(tt) >>> {'name': 'nike', 'city': 'shangsha', 'hobby': 'dance', 'age': '99'} -
删除
1.del空格字典[K] 删除 tt = {'name':'nike', 'city':'shangsha', 'hobby':'dance'} del tt['city'] print(tt) ———————————————————————————————————— 2..pop() 同理,干掉括号内的K键带的数据值,可以复制给其他变量名再次使用 popitem() 返回并删除字典中的最后一对键和值。 -
统计键值对的个数
len() -
三兄弟
keys() >>>拿字典所有的键出来 values() >>>拿字典所有的值出来items() >>>一次性获取字典的键值对数据,封装成列表套元组 支持for循环
tt = {'name':'nike', 'city':'shangsha', 'hobby':'dance'} print(tt.keys()) >>> dict_keys(['name', 'city', 'hobby']) ________________________________ print(tt.values()) >>> dict_values(['nike', 'shangsha', 'dance']) ———————————————————————————————— for k, v in tt.items(): print(k, v) >>> name nike city shangsha hobby dance8.快速生成键值对的字典
Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
dict.fromkeys(seq[, value])姓名 = ('nike', 'jack', 'tom', 'david') # 不指定默认的键值,默认为 None 年龄表 = dict.fromkeys(姓名) print("新字典为 : %s" % str(年龄表)) >>> 新字典为 : {'nike': None, 'jack': None, 'tom': None, 'david': None} # 指定默认的键值 年龄表 = dict.fromkeys(姓名, 10) print("新字典为 : %s" % str(年龄表)) >>> 新字典为 : {'nike': 10, 'jack': 10, 'tom': 10, 'david': 10}9.修改字典
setdefault() # 键存在不修改而是返回该键对应的值 不存在则创建
二、元组内置方法的操作
-
回忆一下定义:
和列表长的很像,但是用()扩起来,内部存放多个元素 元素与元素逗号隔开,元素可以是任意数据 但是元组内元素不支持‘修改’(索引指向的元素的内存地址不能改变)
-
类型转换
能够支持for循环的数据都可以转换成元组
!!!注意:元组内哪怕就算只有一个元素 也需要加上逗号
例:print(type((111,))) 正确识别为tuple -
索引切片就不细讲了,和字符串一样的用法
-
统计元素个数也是一样,len()
-
统计元组内某个数据值出现的次数一样,.count()
-
拿元素出来
t = (111, 222, 333, 444, 555) for i in t: print(i) >>> 111 222 333 444 555
三、集合内置方法的操作
-
定义回顾
定义:用大括号括起来 内存可以存放多个元素 元素与元素之间逗号隔开 元素不是K:V键值对 ,内部元素没有顺序一说 -
类型转换
.set() 内部的数据值必须是不可变的类型,不然没法转q = (111, 223, 2225, 65554) res = set(q) print(res, type(res)) >>> {2225, 223, 65554, 111} <class 'set'> -
去重(自带去重功能)
首先集合是自带去重优化的 t = {1, 2, 3, 1, 1, 3, 2, 3, 2} print(t) >>> {1, 2, 3} ____________ 可以根据这个性质,给别的类型的数据去重 l1 = [11, 33, 44, 55, 11, 44, 44, 55, 33] s1 = set(l1) # 转换这个列表为一个合集并赋值给一个变量 l1 = list(s1) # 又转回去 print(l1) >>> [33, 11, 44, 55] # 注意,是无序的,可以用方法调整 加上l1.sort() >>> [11, 33, 44, 55]四、集合关系运算
friendslist1 = {'nike', 'david', 'john', 'edg'} # 用户1的好友们 friendslist2 = {'lucy', 'edg', 'tom', 'david'} # 用户2的好友们 1. 求两个用户的共同好友 print(friendslist1 & friendslist2) >>> {'edg', 'david'} _______________________ 2. 求两个用户所有的好友 print(friendslist1 | friendslist2) >>> {'john', 'edg', 'lucy', 'nike', 'tom', 'david'} _______________________ 3. 求用户1独有的好友 print(friendslist1 - friendslist2) >>> {'nike', 'john'} _______________________ 4. 求用户2独有的好友 print(friendslist2 - friendslist1) >>> {'lucy', 'tom'} _______________________ 5. 求用户1和用户2各自的好友 print(friendslist1 ^ friendslist2) >>> {'nike', 'lucy', 'john', 'tom'} ________________________ 6. 父集与子集 s1 = {11, 22, 33, 44} s2 = {11, 33} print(s1 > s2) 判断s1是否是s2的父集 >>> True print(s2 < s1) 判断s2是否是s1的子集 >>> True
五、字符编码
-
什么是字符编码
由于计算机内部只识别二进制 但是用户在使用计算机的时候却可以看到各式各样的语言字符 字符编码:内部记录了人类字符与数字对应关系的数据(有点类似超市打价员拿的那个本子,输入啥编码就打出啥东西的价码)2.编码发展史 一家独大>>>群雄逐鹿>>>天下一统
-
计算机最初是由美国人发明的 美国人为了能够让计算机识别英文字符
ASCII码:里面记录了英文字符与数字的对应关系 -
中国人:为了能够让计算机识别中文 我们需要发明另外一套编码表
GBK码:记录了英文中文与数字的对应关系,对于英文一个字节
对应中文使用两个字节甚至更多字节
两个字节其实也不够表示出所有的中文
遇到生僻字可能需要更多位来表示
-
日本人: 为了能够让计算机识别日文 也需要发明一套编码表
shift_JIS码:记录了日文英文与数字的对应关系
-
韩国人:为了能够让计算机识别韩文 也需要发明一套编码表
Euc_kr码:记录了韩文英文与数字的对应关系
-
为了能够实现不同国家之间的文本数据能够彼此无障碍交流需要对编码统一
unicode(万国码)
统一使用两个及以上字符记录字符与数字的对应关系
utf8(万国码的优化版本)
将英文还是用一个字节存储
将中文使用三个字节或更多字节存储
3.编码与解码
编码 >>>
将人类能够读懂的字符安装指定的编码转换成数字 解码 >>>
将数字按照指定的编码转换成人类能够读懂的字符
六、作业
1.优化员工管理系统
拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名(能写就写不会没有关系)
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]
方法一(推荐)
l2 = list(set(l1)) # 转集合后再转回列表
l2.sort(key = l1.index) # 按l1的顺序罗列数据值
print(l2)
>>>
[2, 3, 1, 4, 5, 6]
——————————————————————
方法二
l2 = []
for i in l1:
if not i in l2:
l2.append(i)
print(l2)
>>>
[2, 3, 1, 4, 5, 6]
3.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
linuxs={'kermit','tony','gangdan'}
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
1.
print(pythons & linuxs)
>>>
{'gangdan'}
____________________
2.
print(pythons | linuxs)
>>>
{'jason', 'kevin', 'kermit', 'oscar', 'ricky', 'biubiu', 'gangdan', 'tony'}
————————————————————
3.
print(pythons - linuxs)
>>>
{'oscar', 'ricky', 'jason', 'kevin', 'biubiu'}
____________________
4.
print(pythons ^ linuxs)
>>>
{'kermit', 'oscar', 'biubiu', 'ricky', 'tony', 'kevin', 'jason'}
4.统计列表中每个数据值出现的次数并组织成字典战士
eg: l1 = ['jason','jason','kevin','oscar']
结果:{'jason':2,'kevin':1,'oscar':1}
真实数据
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
方法1.用for循环
l2 = {}
for i in l1:
if i not in l2:
l2[i] = 1
else:
l2[i] += 1
print(l2)
>>>
{'jason': 2, 'kevin': 3, 'oscar': 1, 'tony': 1}
___________________________________________
方法2.for循环 用集合
l2 = {}
for i in set(l1):
l2[i] = l1.count(i)
print(l2)
>>>
{'tony': 1, 'oscar': 1, 'kevin': 3, 'jason': 2}
5.利用节假日查缺补漏

浙公网安备 33010602011771号