python学习第九天

一、字典的常用操作与内置方法

1.1、定义

d = {'username':'jason', 'password':123}
d = dict(username='jason', age=18)
print(d) 
运行结果:
{'username': 'jason', 'age': 18}

注意:
t=(1)
print(t,type(t))
运行结果:
1 <class 'int'>
#在使用容器型的元素的时候,如果该容器类型只有一个元素 ,要习惯性的将逗号加上

#如:
t=(1,)
print(t,type(t))
运行结果:
(1,) <class 'tuple'>

1.2、类型转换

d=dict([["username","password"],("jason",19)])
print(d)
d=dict([["username","password"]])
print(d)
d=dict([("hello",1)])
print(d)
d=dict([{1,2}])
print(d)
运行结果:
{'username': 'password', 'jason': 19}
{'username': 'password'}
{'hello': 1}
{1: 2}

d=dict(username="jason",age=10)
print(d)
运行结果:
{'username': 'jason', 'age': 10}

1.4、操作方法

对于取值来说,字典默认暴露给外界操作的只有字典的key

字典是无序的,没有索引这一说法

d = {'username': 'jason', 'password': 123}#不推荐使用该方法
print(d["username"])
print(d['xxx'])  # KeyError: 'xxx'

(1)get 方法

d = {'username': 'jason', 'password': 123}
res=d.get('username')
print(res)
运行结果:
jason

d = {'username': 'jason', 'password': 123}
res=d.get('xxx')
print(res)# None  键不存在会返回None 不会报错
运行结果:
None

d = {'username': 'jason', 'password': 123}
res=d.get('username',"我是啦啦啦")
print(res)# 键存在还是返回对应的值
运行结果:
jason

res=d.get('name',"我是啦啦啦")
print(res)# 键不存在 返回get方法里面第二个参数
运行结果:
我是啦啦啦

(2)字典新增键值对

方式一:

d = {'username': 'jason', 'password': 123}
d["hobby"]="study"  # 字典的key不存在新增
print(d)
运行结果:
{'username': 'jason', 'password': 123, 'hobby': 'study'}

d = {'username': 'jason', 'password': 123}
d['username'] = 'egon'
print(d)  # 字典的key存在则修改
运行结果:
{'username': 'egon', 'password': 123}

方式二:

d = {'username': 'jason', 'password': 123}
d.update(hobby="paly")
print(d)  # 字典的key不存在则添加

d = {'username': 'jason', 'password': 123}
d.update(username="egon")
print(d)  # 字典的key存在则修改
运行结果:
{'username': 'egon', 'password': 123}

方式三:

键如果存在的情况下,不做修改,将其对应的value取出;

键如果不存在,那么就新增

d = {'username': 'jason', 'password': 123}
d.setdefault("xxx",123)
print(d)  # 字典的key不存在则添加
运行结果:
{'username': 'jason', 'password': 123, 'xxx': 123}

d = {'username': 'jason', 'password': 123}
res=d.setdefault("username",123)
print(res)#存在的情况下,不做修改,将其对应的value取出
运行结果:
jason

(3)快速构建字典

res={}.fromkeys(["k1","k2","k3"],[])
print(res)
运行结果:
{'k1': [], 'k2': [], 'k3': []}

例题:
res.get('k1').append(123)
print(res)# {'k1': [123], 'k2': [123], 'k3': [123]}
"""
A
{'k1': [123], 'k2': [], 'k3': []}
B
{'k1': [123], 'k2': [123], 'k3': [123]}
C
报错
D
不确定
"""
答案:B
#所有的key公用value[]

(4)pop弹出

d = {'username': 'jason', 'password': 123}
res=d.pop('username')# 将括号内指定的key对应的value弹出
print(d,res)
运行结果:
{'password': 123} jason

d = {'username': 'jason', 'password': 123}
res=d.popitem()# 将弹出的键值对组织成元组的形式返回出去
print(d,res)
运行结果
{'username': 'jason'} ('password', 123)

(5)字典方法三剑客

d = {'username': 'jason', 'password': 123}
# printd = {'username': 'jason', 'password': 123}(d.keys())  # 获取字典所有的key
# print(d.values())  # 获取字典所有的value
# print(d.items())  # 获取字典所有的key和value组织成小元组
"""
可以直接只看里面的数据结构
dict_keys(['username', 'password'])
dict_values(['jason', 123])
dict_items([('username', 'jason'), ('password', 123)])
"""
# for key in d.keys():
#     print(key)      
# for value in d.values():
#     print(value)
# for item in d.items():
#     print(item)
# for k, v in d.items():
#     print(k,v)

(6)清空

d = {'username': 'jason', 'password': 123}
d.clear()
print(d)
运行结果:
{}

# __class__  # 双下class

二、集合的常用操作与内置方法

2.1、定义及作用

定义:
s = {1,2,3,4,5,6,7,8}
"""
1.集合内的元素必须是不可变类型
2.元素与元素之间逗号隔开 不是键值对
3.集合内的元素也是无序的
"""
s = {1,2,3,4,5,6,7,8}
print(type(s))#<class 'set'>

如何定义空集合
s1 = {}
d1 = {}
print(type(s1),type(d1))  # <class 'dict'> <class 'dict'>
# 定义空集合一定要用set关键字
ss = set()
print(ss,type(ss))  # set() <class 'set'>

s = {1,1,1,2,3,3,4,3,2,3,4,6,5,3,}
print(s)
运行结果:
{1, 2, 3, 4, 5, 6}

作用:
   	1.去重(set)
    	集合内不可能出现相同的元素
    2.关系运算
    	共同好友、共同关注...
        交叉并集...
# 用集合就是用上面两个功能 如果都用不上 那么就不要用

2.2、类型转换

"""能够被for循环的数据类型都能够被转成集合"""
s1 = set('egon is o DSB')
print(s1)
运行结果:
{'D', 'g', 'i', 's', 'o', ' ', 'B', 'e', 'S', 'n'}

s2 = set([1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7])
print(s2)
运行结果:
{1, 2, 3, 4, 5, 6, 7}

s3 = set({'username': 'jason', 'password': 123})
print(s3)  # {'password', 'username'}
运行结果:
{'username', 'password'}

例题1:
将l = [4,3,2,3,4,6,7,8,1,2,3]去重
l = [4,3,2,3,4,6,7,8,1,2,3]
# 先转成集合
s = set(l)
# 再转成列表
l1 = list(s)
print(l1)

例题2:
将l = [4,3,2,3,4,6,7,8,1,2,3]去重,并保留原有顺序
l = [4,3,2,3,4,6,7,8,1,2,3]
l1=[]
for i in l :
    if i not in l1:
        l1.append(i)
print(l1)

2.3、关系运算

交集、并集、差集、对称差集/交叉补集、子集、父集

用户1的好友列表

friends1 = {'jason','tank','tony','jerry'}

用户2的好友列表

friends2 = {'jason','tony','owen','oscar'}
# 1 求两个用户的共同好友  交集
res = friends1 & friends2
print(res)  # {'jason', 'tony'}
# 2 求两个用户所有的好友
res = friends1 | friends2
print(res)  # {'jerry', 'jason', 'oscar', 'tony', 'tank', 'owen'}
# 3 求用户1独有的好友
res1 = friends1 - friends2
res2 = friends2 - friends1
print(res1,res2)  # {'jerry', 'tank'} {'owen', 'oscar'}
# 4 求两个用户各自独有的好友            对称差集
res = friends1 ^ friends2
print(res)  # {'owen', 'jerry', 'tank', 'oscar'}
# 5 子集 父集
s1 = {12,3,4,5,6}
s2 = {12,6}
print(s1 > s2)  # s1是否是s2的父集
print(s2 < s1)  # s2是否是s1的子集

三、字符编码

3.1、理论铺垫

# 理论多结论少
# 计算机三大核心硬件
	CPU
    
    内存
    
    硬盘
"""
任何一个程序都是先存放与硬盘上的
要想运行起来 必须先由硬盘读取到内存
之后cpu去内存中取指然后执行

在运行的程序产生的数据最先都是存放与内存中的
"""

# 计算机是基于电工作的 那么计算机只能识别电信号
  计算机内部存储数据用的都是01010101的二进制数据
 
# 文件的后缀名是干嘛的
  文件的后缀名仅仅是给人看的 因为对应计算机来说所有的数据都是0101010的二进制
   
# 普通的文本编辑器和python解释器的工作流程
	相同
    	1.任何的程序要想运行都是先从硬盘读取到内存
        2.文本编辑器和python解释器都会去硬盘中读取你想要读取的文件内容   
    不同
    	3.文本编辑器将文件内容读取之后仅仅是展示给用户看
        而我们的python解释器会识别语法并执行python代码

3.2、详细内容

# 字符编码研究的范围只针对文本文件 音频、视频这些不包含在内

# 字符编码的发展史
	1.一家独大
    计算机起源于美国
    美国人用英文交流 但是计算机只能识别二进制数据
    为了能够让计算机识别人类能够读懂的字符,这里面肯定有一个
    人类字符		>>>		计算机二进制数据
    中间的字符与数字的对应关系其实就是一张表
    	ASCII码表
        这张表只记录了英文和数字的对应关系
        用8(bit)来表示一个英文字符
        1bytes = 8bit
        1024bytes = 1KB
        1024KB = 1MB
        1024MB = 1GB
        ...
    
    2.群雄割据
    	中国人也用得起计算机
        	自己做一个汉字跟数字对应关系	GBK
            GBK表
            	汉字、英文 跟数字的对应
                1bytes来表示英文
                2bytes来表示汉字
                	如果出现了生僻字可能还需要用3bytes甚至跟多的bytes
            
        日本人也用得起计算机
        	自己做一个汉字跟数字对应关系	shift_JIS
            GBK表
            	日文、英文 跟数字的对应
                
        韩国人也用得起计算机
        	自己做一个汉字跟数字对应关系	Euc_kr
            Euc_kr表
            	韩文、英文 跟数字的对应
                
"""
我们在输入中文字符的时候
	1.内部基于GBK翻译成了对应的二进制数据 在内存
	2.然后将基于GBK编码的二进制数据刷到硬盘 永久保存
	3.将硬盘中基于GBK编码的二进制数据读取到内存之后按照GBK编码的对应关系翻译成对应的中文
"""
    3.天下一统
    	万国码 unicode
        兼容万国
        并且跟之前所有国家的编码都有对应关系
		1990开始研究的 1994年才开始正式使用
        
        所有的字符都是用2bytes来存储
        	英文用2bytes
            中文也用2bytes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值