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)
View Code

(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)
View Code

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)
View Code

(2).clear():清空字典,剩余一个空字典

1 dic ={'name':'dzf','age':20,'hobby':['','音乐']}
2 dic.clear()
3 print(dic)
View Code

(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)
View Code

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)
View Code

3.改:即改变键值对

(1).按key改:即有key就覆盖

1 dic ={'name':'dzf','age':20,'hobby':['','音乐']}
2 dic['name']='ds'
3 print(dic)
View Code

(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)
View Code

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'])
View Code

(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','没有此键'))
View Code

四.字典的嵌套:即字典中含有多个字典以及其他类型数据等。用于复杂的计算的等。

 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)
View Code

 

五、字典的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))
View Code

六、字典的其他运用

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))
View Code

用于打印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))
View Code

九、is  :用于判断id地址

name1='dzf'
name2='dzf'
print(name1 is name2)
print(name1 == name2)
View Code

十、小数据池 :指在一定的范围内当两个不同的变量相等时,他们都指向同一个内存地址。        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))
View Code

 

posted @ 2018-01-25 17:01  临丶  阅读(215)  评论(0)    收藏  举报