python基础数据类型(字典),编码的深入了解
字典
一、字典是python中非常重要的数据类型,是python中唯一 一个映射的数据类型。
数据的可变与不可变:
不可变数据类型:int str bool tuple
可变数据类型:list dict set
二、字典的 key:value 也称键值对 字典中可以放大量数据类型,并且关联性较强。在3.5版本以前字典是无序的,3.5版本以后字典是有序的。
key:键 是唯一的 且 是不可变数据类型
value:值 可以是任意数据类型
三、字典的常用方法
字典与列表一样都有增、删、改、查,等功能
1.增:即在字典中增加键值对。
(1).直接添加 特点:如果要添加的’键’是原字典中就有的‘键’,那么新添加的‘键值对’就会覆盖原字典中的‘键值对’。
即 有key就覆盖,没有就添加
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 dic['high']='170' 3 print(dic) 4 dic['name']='ds' 5 print(dic)
(2).setdeafult(): 特点:与直接添加相反,有key不变,没有key才添加。
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 dic.setdefault('name','ds') 3 print(dic) 4 dic.setdefault('xianhuan','xuexi') 5 print(dic)
2.删:即删除字典中的键值对
(1).pop:按key删除,有返回值,并且如果没有此键,可以设返回值。
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 ret=dic.pop('name2','没有此键') 3 print(ret) 4 print(dic) 5 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 6 dic.pop('name') 7 print(dic)
(2).clear():清空字典,剩余一个空字典
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 dic.clear() 3 print(dic)
(3).del():删除字典,删除键值对
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 del dic['name'] 3 print(dic) 4 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 5 del dic 6 print(dic)
ps:删除字典时,会打印报错,因为字典已经不存在了
(4).popitem():随机删除 ps:3.5版本以前是随机删除,但3.5版本以后是默认删除最后一个,并且有返回值。
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 ret=dic.popitem() 3 print(dic) 4 print(ret)
3.改:即改变键值对
(1).按key改:即有key就覆盖
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 dic['name']='ds' 3 print(dic)
(2).update():将dic的键值对,覆盖,添加到dic2中,dic不变
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 dic2={'name':'ds','high':170} 3 dic2.update(dic) 4 print(dic) 5 print(dic2)
4.查:即查找dic中的键值对等
(1).按照key查,没有返回值,找不到时会报错。
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 print(dic['name']) 3 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 4 print(dic['name2'])
(2).get():也是按照key查,但有返回值,默认返回值为None,也可以设置返回值。
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 print(dic.get('name')) 3 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 4 print(dic.get('name2')) 5 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 6 print(dic.get('name3','没有此键'))
四.字典的嵌套:即字典中含有多个字典以及其他类型数据等。用于复杂的计算的等。
1 dic = { 2 'name':'金鑫', 3 'name_list':[1,2,3,'李杰'], 4 1:{ 5 'python10':['小黑','萌哥'], 6 '老男孩':{'name':'oldboy','age':56} 7 } 8 } 9 1,[1,2,3,'李杰']追加'wusir' 10 2, ['小黑','萌哥'] 小黑 萌哥中间 插入一个花哥 11 3, {'name':'oldboy','age':56} 添加一个键值对,hobby:男人 12 dic = { 13 'name':'金鑫', 14 'name_list':[1,2,3,'李杰'], 15 1:{ 16 'python10':['小黑','萌哥'], 17 '老男孩':{'name':'oldboy','age':56} 18 } 19 } 20 21 l=dic['name_list'] 22 l.append('wusir') 23 print(dic) 24 25 dic[1]['python10'].insert(1,'花哥') 26 print(dic) 27 28 dic[1]['老男孩'].setdefault('hobby','男人') 29 print(dic)
五、字典的for循环:
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 for k in dic: 3 print(k) 4 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 5 for k in dic.keys(): 6 print(k) 7 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 8 for k in dic.values(): 9 print(k) 10 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 11 for a,b in dic.items(): 12 print(a,b) 13 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 14 for k in dic.keys(): 15 print(k,type(k))
六、字典的其他运用
1 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 2 keys=dic.keys() 3 print(keys,type(keys)) 4 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 5 values=dic.values() 6 print(values,type(values)) 7 dic ={'name':'dzf','age':20,'hobby':['书','音乐']} 8 items=dic.items() 9 print(items,type(items))
用于打印dic的key value 以及 key和value 一起打印
ps:打印出来的是一种字典形式的数据类型(type为<class 'dict_keys'>)可以看做成一个列表
七、拓展
例 a,b=1,3
print(a,b)
那么print出来的值会a=1 b=c
这是python中比较有趣的一点应用,a,b与后面的值有对应关系,可用于快速寻找,赋值....
八、id():id是用于查询数据的内存地址的
1 name = 'dzf' 2 print(id(name)) 3 lis = [1,2.3,...] 4 print(id(lis))
九、is :用于判断id地址
name1='dzf' name2='dzf' print(name1 is name2) print(name1 == name2)
十、小数据池 :指在一定的范围内当两个不同的变量相等时,他们都指向同一个内存地址。 ps:只有int与str有小数据池概念
int: -5~~~256之间
str: 如果都是由字母组成的str,那么都是指向同一个内存地址。
如果是int与单个字母相乘,则20以内(包含20)指向的是同一个内存地址。

十一、编码的深入认识。
在电脑内存中,绝大部分文件都是以str形式保存的,内部编码为unicode。
而保存在硬盘中和要传输的文件都是以bytes形式保存的,内部编码为非unicode。为(uft-8,gbk...)
所以。str形式的文件不能存储和传输,需要转化为byte形式才可传输和存储。
str---->bytes:
1 name='dzf' 2 name1 = name.encode('utf-8') 3 name2 = name.encode('gbk') 4 print(name,type(name)) 5 print(name1,type(name1)) 6 print(name2,type(name2))
浙公网安备 33010602011771号