听说你也要自学python,看这儿就够了(五)

前面我们基本讲完了python的一个重要知识:序列(列表,元组,字符串),这一更同样带来一个很重要的python知识点:字典!(我个人把他理解做c语言当中的结构体,但也有点不同。看完这篇你就知道这字典到底是个啥了)

目录

  1. 字典的用途
  2. 创建和使用字典
  3. 小结

福利大放送

关注公众号:“我用代码编织世界”有豪礼相赠。回复书籍有惊喜哦!
在这里插入图片描述
小芝士:需要将一些列值组合成数据结构并通过编号来访问各个值时,列表很有用。本章介绍一种可以通过名称来访问各个值的数据结构。这种数据结构称为映射字典是python唯一的内置映射类型,其中的值不按顺序,而是存储在下。键可能是数,也可能是字符串或者元组。键可能是数,也可能是字符串或者元组。

4.1 字典的用途

字典的名称指出了这种数据结构的用途,普通图书适合按从头到尾的顺序阅读,如果你愿意,你可以快速翻到任何一页,这有点像拍摄中的的列表字典,日常生活中的字典和python字典,旨在让你能够轻松找到特定的词(键)来获取它的定义(值)
下面是一个电话本和一些号码:

>>>names = ['Alice','Beth','Cecil','Dee','Eric']
>>>numbers = ['1234','1465','5689','8945','9874']

注意:光理论是不够的,在此送大家一套2020最新Python全栈实战视频教程,点击此处 进来获取 跟着练习下,希望大家一起进步哦!

创建这些列表之后,就可以像下面这样查找cecil的电话号码

>>>numbers[names.index('cecil')]
'5689'

这样可行,但是不太实用,实际上你希望能够像下面这个样子做:

>>>phonebool['cecil']
'3558'

如何达成这个目标呢?只要phonebook是个字典就行

4.2 创建和使用字典

字典由以及对应的组成,这种键值对叫做项,在前面的示例中,键为名字,值为电话号码,每个键与值之间都用冒号分隔,项之间用逗号分隔,整个字典放在一个花括号,空的字典,没有任何项目,用两个花括号表示,就像这样{}

4.2.1 函数dict

可以使用函数dict从其他映射(其他字典)或键值对序列来创建字典

>>>items = [('names','Gumby'),('age',42)]
>>>d = dict(items)
>>>d
{'age':42,'name':'Gumby'}
>>>d['name']
'Gumby'

可以使用关键字实参来调用这个函数:

>>>d = dict(name = 'Gumby',age = 42)
>>>d
{'age':42,'name':'Gumby'}

尽管这可能是函数dict最常见用法,但也是可以使用一个映射实参来调用他,这将创建一个字典,其中包含指定映射中所有项。像函数list,tuple和str一样,如果调用这个函数时没有提供任何实参,将返回一个空字典。从映射创建字典时候,如果该映射也是字典,可以不使用函数dict,而是使用地点方法copy。

4.2.2 基本的字典操作

字典的基本行为在很多方面都和序列类似

  • 1.len(d)返回字典d包含的项(键–值对)数目
  • 2.d[k]返回与键k相关的联的值
  • 3.d[k] = v将值v关联到键k
  • 4.del d[k] 删除键为k的项
  • 5. k in d检查字典d是否包含键为k的项
    虽然字典和列表有多个相同之处,但也有一些重要的不同之处

4.2.3 字典方法

4.2.3.1 clear

方法clear删除所有的字典项,这个操作就地执行,因此,没有返回值

>>>d = {}
>>>d['name'] = 'Gumby'
>>>d['age'] = 42
>>>d
{'age' : 42,'name':'Gumby'}
>>>returned_value = d.clear()
>>>d
{}
>>>print(returned_value)
None

这为什么很有用呢?我们来看两个场景。下面是第一个场景:

>>>x = {}
>>>y = x
>>>x['key']=value
>>>y
{'key' : 'value'}
>>>x = {}
>>>y
{'key' : 'value'}

下面是第二种场景:

>>>x = {}
>>>y = x
>>>x['key']='value'
>>>y
{'key' : 'value'}
>>>x.clear()
>>>y
{}

在这两个场景中,x和y最初都指向同一个字典。在第一个场景中,我通过将一个空字典赋值x来清空他,这对y没有任何影响,他依然指向原来字典,这种可行,但要是删除原来字典的所有元素,必须使用clear。如果这样做,y将也是空的,如第二个场景所示.

4.2.3.2 copy

4.2.3.2 copy

>>>x = {'username':'admin','machines':['foo','bar','baz']}
>>>y=x.copy()
>>>y['username'] = 'mlh'
>>>y['machines'].remove('bar')
>>>y
{'username':'mlh','machines':'baz'}
>>>x
{'username':'admin','machines':['foo','baz']}

使用深复制就能解决问题(from copy import deepcopy)

4.2.3.3 fromkeys

方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是none

>>>{}.fromkeys(['name','age'])
{'age':None,'name':None}

这个示例创建了一个空字典,在对其调用方法fromkeys来创建另一个字典,这显得有点多余。你可以不这样做,而是直接对dict调用方法fromkeys。

>>>dict.fromkeys(['name','age'])
{'age':None,'name':None}

如果你不喜欢使用默认值none,可以自定义

>>>dict.fromkeys(['name','age'],'(unknown)')
{'age':unknown,'name':unknown}

4.2.3.4 get

方法get为访问字典项提供了宽松环境。通常,如果你试图访问字典中没有的项目,将引发错误。

>>>d = {}
>>>print(d['name'])
报错

而使用get不会这样

>>>print(d.get('name'))
None

如你所见,使用get来访问不存在的键时,没有引发异常,而是返回none。你可以指定”默认“,这样将返回你指定的值而不是none。

>>>d.get('name','N/A')
'N/A'

如果字典中包含指定的键,get的作用将与普通字典查找相同。

>>>d['name'] = 'Eric'
>>>d.get('name')
'Eric'

4.2.3.5 items

方法items返回一个包含所有字典项的列表,其中每个元素都为(key,value)的形式。字典项在列表中顺序不确定

>>>d = {'title':'python web site', 'url':'http://www.python.org','spam':0}
>>>>d.items()
dict_items([('url','http://www.python.org'),('spam',0),('title','python web site')])

返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代。另外,你还可确定其长度以及对其执行成员资格审查。

>>>it = d.items()
>>>len(it)
3
>>>('sapm',0) in it
True

视图的一个优点是不复制,它们始终是底层字典的反映,即便你修改了底层字典也是如此

>>>d['spam'] = 1
>>>('spam',0) in it
False
>>>d['spam'] = 0
>>>('spam',0) in it
True

然而,如果你要将字典项复制到列表中可自己动手做。

>>>list(d.items())
[('spam',0),('title','python web site'),('url','http://www.python.org')]

4.2.3.6 keys

方法keys返回一个字典视图,其中包含指定字典中的键

4.2.3.7 pop

方法pop可用于获取与指定键相关联的值,并将该键值对从字典中删除

>>>d = {'x':1,'y':2}
>>>d.pop('x')
1
>>>d
{'y':2}

4.2.3.8 popitem

方法popitem类似于list.pop,但是list.pop弹出列表中最后一个元素,而popitem随机地弹出一个字典项,因为字典项顺序不确定,所有没有”最后“这个概念。

>>>d = {'url':'http://www.python.org','spam':0,'title':'python web site'}
>>>d.popitem()
('url','http://www.python.org')
>>>d
{'spam':0,'title':'python web site'}

虽然popitem类似于列表方法pop,但字典中没有与append相类似的方法。因为字典无序。

4.2.3.9 update

方法update使用字典中的项来更新另一个字典。

>>>d = {
...     'title':'python web site'
...     'url':'http://www.python.org'
...     'changed':   
...     }
>>>x = {'title':'python language website'}
>>>d.update(x)
>>>d
{'url':'http://www.python.org','changed':
'Mar 29 23:30:15 Met 2020','title':'python language website'}

4.2.3.10 values

方法values返回一个由字典中的值组成的列表视图。不同于方法keys,方法values返回的视图可能包含重复值

>>>d = {}
>>>d[1] = 1
>>>d[2] = 2
>>>d[3] = 3
>>>d[4] = 1
>>>d.values()
dict_values([1,2,3,1])

4.3 小结

注意:光理论是不够的,在此送大家一套2020最新Python全栈实战视频教程,点击此处 进来获取 跟着练习下,希望大家一起进步哦!

本章介绍了如下内容:

  • 映射:映射让你能够使用任何不可变的对象来标识元素
  • 字典方法:字典有很多方法的调用方式与列表和字符串相同

往期精彩推荐

听说你也要学python,看这儿就够了(四)Please vivst me!

听说你也要自学python,看这儿就够了(三)Please vivst me!

听说你也要自学python,看这儿就够了(二)Please vivst me!

听说你也要自学python,看这儿就够了(一)Please vivst me!

预告

讲完基本的数据结构,大家对使用已经有了基本的认识,下一章我们返璞归真,下一更我们详细讲解基础“语句”(注意哦,这里是打引号的语句)

干货分享

关注公众号:“我用代码编织世界”既有大礼相赠!
后台回复"python"更有好礼相送哦!(解锁更多电脑知识看这儿就够了)

听说你也要自学python,看这儿就够了(五)_第1张图片

你可能感兴趣的:(笔记)