Python day9:基本数据类型及内置方法3+字符编码

一、字典及内置方法
1.定义:在{}中,用逗号分隔,各个元素以key:value的形式储存key通常是字符串型

d = {'username':'jason', 'password':123}
d = dict(username='jason', age=18)

2.类型转换

d1 = dict([['username','password'],('jason',123)])
print(d1)  # {'username': 'password', 'jason': 123}

3.操作方法
1.取值

'''
字典默认暴露给外界的可操作的只有字典的key
字典是无序的 根本没有索引一说
'''
d = {'username': 'yang', 'password': 123}
print(d['username'])  # 不推荐使用该方法
print(d['age'])  # KeyError: 'age',当直接取一个不存在的key 会报错
'''
1 get方法  以后字典取值,尽量用get方法
'''
res = d.get('username')
print(res)  # jason
'''
None  键不存在会返回None 不会报错,因为没有在get中设置默认返回值,所以返回None
'''
d = {'k1':111,'k2':222,'k3':333}
res = d.get('k4','找一个存在的键啊,蠢蛋')
print(res)  # 键不存在 返回get方法里面第二个参数
------------------------------------
找一个存在的键啊,蠢蛋

2.字典新增键值对

"""方式一:直利用key"""
d = {'username': 'yang', 'password': 123}
d['hobby'] = 'study'  # 字典的key不存在新增
print(d)
d['username'] = 'egon'
print(d)  # 字典的key存在则修改
----------------------------------------------
{'username': 'yang', 'password': 123, 'hobby': 'study'}
{'username': 'egon', 'password': 123, 'hobby': 'study'}

"""方式二,update,特点与方法一相同,存在key就修改,不存在就添加"""
d.update(hobby = 'study')
print(d)
d.update(username = 'egon')
print(d)
-------------------------------
{'username': 'yang', 'password': 123, 'hobby': 'study'}
{'username': 'egon', 'password': 123, 'hobby': 'study'}

"""方式3 setdefault
键如果存在的情况下 那么不做修改 而是将对应的value取出
键如果不存在的情况下 那么就是新增
"""
d.setdefault('xxx',123)
print(d)  # 键不存在是新增
res = d.setdefault('username',123)
print(d)  # {'username': 'jason', 'password': 123}
print(res)  # jason

3.快速构造字典{}.fromkeys()

"""
day8中有提到此题的问题内容
面试题:
res = {}.fromkeys(['k1','k2','k3'],[])
res.get('k1').append(123)
print(res)的结果是?
A
{'k1': [123], 'k2': [], 'k3': []}
B
{'k1': [123], 'k2': [123], 'k3': [123]}
C
报错
D
我TMD的也不知道
"""
答案:B

4.弹出的两种方法

d = {'k1':1,'k2':2,'k3':3}
print(d.pop('k1'),d)
d = {'k1':1,'k2':2,'k3':3}
print(d.popitem(),d)
------------------------------
1 {'k2': 2, 'k3': 3}
('k3', 3) {'k1': 1, 'k2': 2}

5.字典方法三剑客

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

d = {'username': 'yang', 'password': 123}
for key in d.keys():
    print(key,end='   ')
print()
for value in d.values():
    print(value,end='   ')
print()
for item in d.items():
    print(item,end='   ')  # item不解压赋值直接返回元组
    print(type(item))
print()
for k, v in d.items():
    print(k,v,end='   ') 
---------------------------------------
username   password   
yang   123   
('username', 'yang')   <class 'tuple'>
('password', 123)   <class 'tuple'>
username yang   password 123   

6.清空

d.clear()
print(d)

二、集合set

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

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

类型转换

"""能够被for循环的数据类型都能够被转成集合"""
# s1 = set('egon is o DSB')
# print(s1)
# s2 = set([1,2,3,4,5,6,7,7,7,7,7])
# print(s2)
# s3 = set({'username':'jason','password':123})
# print(s3)  # {'password', 'username'}

1.去重

s = {1,1,1,2,3,3,4,3,2,3,4,6,5,3,}
print(s)  # 集合内如果有相同的元素会自动去重
# 去重练习题
l = [4,3,2,3,4,6,7,8,1,2,3]
# 要求1 对列表进行去重不需要保持原来的元素顺序
# 先转成集合
s = set(l)
# 再转成列表
l1 = list(s)
print(l1)
# 要求2 对列表去重之后需要保持原来的元素顺序
new_l = []
for i in l:
    if i not in new_l:
        new_l.append(i)
print(new_l)

2.关系运算

# 用户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的子集

总结:python基本数据类型

1.整型int
2.浮点型float
3.字符串str
4.列表list
5.字典dict
6.布尔值bool
7.元组tuple
8.集合set

三、字符编码
任何一个程序都是先存放与硬盘上的
要想运行起来 必须先由硬盘读取到内存
之后cpu去内存中取指然后执行

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

计算机是基于电工作的,那么计算机只能识别电信号
计算机内部存储数据用的都是01010101的二进制数据

文件的后缀名是干嘛的?
文件的后缀名仅仅是给人看的 因为对应计算机来说所有的数据都是0101010的二进制

普通的文本编辑器和python解释器的工作流程
相同点
1.任何的程序要想运行都是先从硬盘读取到内存
2.文本编辑器和python解释器都会去硬盘中读取你想要读取的文件内容
不同点
3.文本编辑器将文件内容读取之后仅仅是展示给用户看
而我们的python解释器会识别语法并执行python代码

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

字符编码的发展史
1.一家独大
计算机起源于美国
美国人用英文交流 但是计算机只能识别二进制数据
为了能够让计算机识别人类能够读懂的字符,这里面肯定有一个
人类字符 >>> 计算机二进制数据
中间的字符与数字的对应关系其实就是一张表
ASCII码表
这张表只记录了英文和数字的对应关系
用8位(bit)来表示一个英文字符

2.群雄割据
当世界上其他国家都发展起来计算机行业时候,仅仅ASCII码表就不够用了,因为每个国家都需要有字节去对应自己国家的语言。
所以中国创造了GBK国标
GBK表:
汉字、英文 跟数字的对应
1bytes来表示英文
2bytes来表示汉字
如果出现了生僻字可能还需要用3bytes甚至跟多的bytes

我们在输入中文字符的时候
1.内部基于GBK翻译成了对应的二进制数据 在内存
2.然后将基于GBK编码的二进制数据刷到硬盘 永久保存
3.将硬盘中基于GBK编码的二进制数据读取到内存之后按照GBK编码的对应关系翻译成对应的中文
3.天下一统
万国码 unicode
兼容万国
并且跟之前所有国家的编码都有对应关系
1990开始研究的 1994年才开始正式使用

所有的字符都是用2bytes来存储
英文用2bytes
中文也用2bytes

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355