Python基础之字典dict(薄弱环节重点回顾,记不住打死自己)

字典是我Python基础里面学的最薄弱的环节,重新回顾,务必深入骨髓。

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,字典是另 一种可变容器模型,且可存储任意类型对象。具有极快的查找速度。

字典是一种通过名字或者关键字引用的得数据结构,其键可以是数字、字符串、元组、布尔值也可以,这种结构类型也称之为映射。字典类型是Python中唯一內建的映射类型。

重点就是字典的键必须是可以被哈希的,什么叫可以被哈希我说不上来,简单的说就是不可变对象。

a= {True:"23"}
a[True]
'23'

1、构造字典:dict命令

字典可以通过dict构建字典,或者简单通过复制新建一个空字典a={}.

dd=dict(a='b', c='d')         # 直接通过dict后面加入复制表达式,直接生成字典。   第一种
dd
{'a': 'b', 'c': 'd'}

简单插入zip函数介绍下,zip是可以将两个或多个列表压缩成一个列表的

l1 = [1 ,2, 3]
l2 = [4, 5, 6]
l3 = list(zip(l1, l2))
l3
[(1, 4), (2, 5), (3, 6)]

解压的话通过zip(*l3)后续也要通过list可以显示。

通过zip我们就可以通过dict用另外一种方式创建字典。

l1 = [1 ,2, 3]
l2 = [4, 5, 6]
dict1=dict(zip(l1,l2))                                    #另一种
dict1
{1: 4, 2: 5, 3: 6}

 相当于实际操作的为dict([[1,4],[2,5],[3,6]])

l=dict([[1,4],[2,5],[3,6]])                                  #另一种
l
{1: 4, 2: 5, 3: 6}

通过dict.fromkys                             #另外一种,前面的参数为可迭代对象,对象需要满足字典key的要求,后面的value默认就是None,可以不写,但写的话要注意,如果value你写了一个列表,那你的所有的keys都将指向同一个value,以前很早的时候不懂,上过一次当。

l1
[1, 2, 3]
dict.fromkeys(l1,None)
{1: None, 2: None, 3: None}

dict.fromkeys('abc')
{'a': None, 'b': None, 'c': None}

网上另外的还有通过赋值用了copy与deepcopy这个我不介绍了,给自己提个醒,.copy,.deepcopy只要再可变参数list,dict,set下面才是可以用的。

字典很多方法跟列表是相同的,因为都是一个是序列容易,一个是映射容器。简单的clear,pop等后面可能不讲了,后面我看能不能找一些相对小众的介绍下:

第一个就是.format_map(其实这个是字符串的方法。。。。。)

In [83]: info = {"name": "sidian", "age": 18}                                                         

In [84]: "my name is {name},age is {age}".format_map(info)                                            
Out[84]: 'my name is sidian,age is 18'

 当你做好一个键值对的数据表,格式化输出不要爽死了

 第二个介绍一下.items方法:

这个专业名词叫字典视图,返回视图可用于迭代,而且反应的内容是跟随字典实时更新的。

In [92]: it                                                                                           
Out[92]: dict_items([('name', 'sidian'), ('age', 18)])

In [93]: info                                                                                         
Out[93]: {'name': 'sidian', 'age': 18}

In [94]: it = info.items()                                                                            

In [95]: it                                                                                           
Out[95]: dict_items([('name', 'sidian'), ('age', 18)])

In [97]: ('age',18) in it                                                                             
Out[97]: True

In [98]: info['age'] = 20                                                                             

In [99]: ('age',18) in it                                                                             
Out[99]: False

In [100]: ('age',20) in it                                                                            
Out[100]: True

 .keys,.items,.values,返回的都是可迭代对象,可用list直接生成列表。

第三个就是setdefault方法:

上代码

In [101]: info                                                                                        
Out[101]: {'name': 'sidian', 'age': 20}

In [102]: info.setdefault('name')                                                                     
Out[102]: 'sidian'

In [103]: info.setdefault('sex','male')                                                               
Out[103]: 'male'

In [104]: info                                                                                        
Out[104]: {'name': 'sidian', 'age': 20, 'sex': 'male'}

In [105]: info.setdefault('sex','male')                                                               
Out[105]: 'male'

In [106]: info.setdefault('addr')                                                                     

In [107]: info                                                                                        
Out[107]: {'name': 'sidian', 'age': 20, 'sex': 'male', 'addr': None}
In [108]: info.setdefault('sex','无语')                                                               
Out[108]: 'male'

 

对一个字典使用该方法,一般给与两个参数,第一个参数为预计读取或者准备设置的key,第二个是如果设置的话,value将就是它

假如你第二个参数没有填写,默认就是None。

这个命令setdefault不管是读取或者设置Key都将返回对应value的值,重点补充,如果values是列表或者字典的容器参数。

不管是读取还是写入字典key,后面输出的value如果是容器参数,可以进行pop,remove,append,clear等操作,操作将直接影响字典本省的value(且没有返回值了,因为方法直接把返回值该了,有返回值又能改的一般也就pop这么一个方法)。

切记只有容器类参数才可以。

d1 = {1: 'ab'}
d1.setdefault(1,None).upper()
'AB'
d1
{1: 'ab'}
d2 = {2: [1, 2, 3]}
d2.setdefault(2,[]).append('ok')
d2
{2: [1, 2, 3, 'ok']}
d2.setdefault(3,[]).append('来了')
d2
{2: [1, 2, 3, 'ok'], 3: ['来了']}
原文地址:https://www.cnblogs.com/sidianok/p/11772503.html