相信你们对字典并不陌生吧,学生时代一块块的大小 “砖头”,还记得怎么用吧?先从索引查找,无论是拼音仍是偏旁部首,经过索引查到相应的内容,这样就不须要咱们从头一页一页的找,这种方法能够很快的找到目标。正是基于这种需求,Python 里有了一种 dictionary 的对象类型,翻译过来就是 “字典”,用 dict 表示。python
字典里的元素是一对一对的,有个特别好听的名字叫:键 / 值对,形式是 "key" : "value" ,前面的是键,后面是前面的键所对应的值,键 / 值之间用英文的冒号隔开,每一对键 / 值之间用英文的逗号隔开。在字典中,键是惟一的,不能重复,而值则是对应于键,能够重复。bash
建立字典的方法有不少,我在这里挑几种依次给你们说说。函数
1.建立一个空的字典,而后向里面加东西,固然也能够建立一个非空的字典而后在里面加键 / 值对。spa
>>> first_dict = {}
>>> first_dict
{}
>>> second_dict = {'name':'rocky','like':'python'}
>>> second_dict
{'name': 'rocky', 'like': 'python'}
>>> second_dict['where'] = 'China'
>>> second_dict
{'where': 'China', 'name': 'rocky', 'like': 'python'}
复制代码
在前面的文章里咱们讲过字符串,列表和元组,其中列表是可变的,字符串和元组是不可变的,那么字典呢?咱们来试验一下。翻译
>>> second_dict = {'name':'rocky','like':'python'}
>>> second_dict['name'] = 'leey'
>>> second_dict
{'name': 'leey', 'like': 'python'}
复制代码
以上代表,字典是能够修改的,即它是可变的。code
2.能够利用元组建立字典,请看下面的实例。cdn
>>> tup = (['name','rocky'],['like','python'])
>>> my_dict = dict(tup)
>>> my_dict
{'name': 'rocky', 'like': 'python'}
复制代码
或者直接用下面的形式也能够:对象
>>> my_dict = dict(name = 'zhangsan',other = 'lisi')
>>> my_dict
{'other': 'lisi', 'name': 'zhangsan'}
复制代码
在这里再提一次,千万要记得在字典中 “键” 必须是是不可变的数据类型, “值” 能够是任意的数据类型。因此元组能够当字典的键,可是列表能够,列表只能作值。排序
字典中的 键/值 实际上就是一种映射关系,只要知道了 “键”,就确定知道 “值”。索引
>>> my_dict = dict(name = 'zhangsan',other = 'lisi')
>>> my_dict['other']
'lisi'
复制代码
因此字典中的 “键” 是多么的好用,经过它能够查找值,能够添加值,能够改变值。
既然字典是一种映射关系,因此在字典里也就不须要考虑排序的问题,只要有了 “键” 就能够知道 “值”,那么键 / 值对的位置在哪里也就不须要考虑了,若是你仔细看过上面的例子,你就会发现添加完的值在字典中的显示并不按照它的添加顺序。又由于没有了排序,因此在字典中也没有索引,因此就不存在索引 & 切片。
字典这种键 / 值对的方式存储数据是一种很是高效的方法,查找速度超快,相同的,若是你要在列表中查找一个值,须要从头开始一个个的找,直到找到了指定的索引值,可是在字典中,直接就能够经过 “键” 找到 “值”,小规模数据的时候这种好处可能不显,当存储大规模数据的时候,这种好处是至关明显的。
下面我用一些实例来依次演示字典中的基本操做:
>>> my_dict = {'name':'rocky','like':'python','age':23}
>>> len(my_dict) #返回字典中键 / 值对的数量
3
>>> my_dict['age'] #返回字典中的键值
23
>>> my_dict['like'] = 'C ++' #改变字典中的键值
>>> my_dict
{'age': 23, 'name': 'rocky', 'like': 'C ++'}
>>> del my_dict['like'] #删除指定的键 / 值对
>>> my_dict
{'age': 23, 'name': 'rocky'}
>>> 'like' in my_dict #检查字典中是否含有指定键的项
False
复制代码
与前面所讲述的其它对象类型类似,字典这个对象类型也有一些可以实现对其操做的方法。
1.clear
clear 清除字典中全部的元素,获得的是空的字典。
>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.clear()
>>> my_dict
{}
>>> del my_dict
>>> my_dict
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'my_dict' is not defined
复制代码
上面的例子咱们能够看出 clear 和 del 的区别很大,clear 是将字典清空,获得空字典,而 delete 是将字典删除,直接从内存中去掉。
2. get & setdefault
这两个是跟键 / 值对相关的方法,get 方法就是要获得字典中某个 “键” 的 “值”,那么这就有人要说,不是上面的时候咱们已经讲过直接查就行吗?在这里的 get 和以前说的还不太同样,这里的 get 稍微宽松一些,若是想要查的值不存在,get 不会有啥反应,而以前说的方法会报错。
>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.get('name')
'rocky'
>>> my_dict.get('age')
>>> my_dict['age']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age'
复制代码
setdefault 也是用来查找字典中某个 “键” 的 “值”,若是查找的 “键” 存在的话就正常输出,若是不存在的话,就在字典中加入这个键 / 值对。
>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.setdefault('like')
'python'
>>> my_dict.setdefault('age','23')
'23'
>>> my_dict
{'name': 'rocky', 'like': 'python', 'age': '23'}
复制代码
3.items & keys & values
这是字典的 3 个方法,它们之间有类似之处,很简单,请看下面的实例:
>>> my_dict = {'name':'rocky','like':'python'}
>>> my_d = my_dict.items()
>>> my_d
dict_items([('name', 'rocky'), ('like', 'python')])
>>> my_k = my_dict.keys()
>>> my_k
dict_keys(['name', 'like'])
>>> my_v = my_dict.values()
>>> my_v
dict_values(['rocky', 'python'])
复制代码
4.pop & popitem
pop 和 popitem 是字典中的删除操做。
pop 是以字典的 “键” 为参数,删除指定的键 / 值对,pop 中的参数不能省略且若是删除字典中没有的键 / 值对,会报错。
>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.pop('name')
'rocky'
>>> my_dict
{'like': 'python'}
>>> my_dict.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
>>> my_dict.pop('age')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age'
复制代码
popitem 和 pop 有类似之处,可是 popitem 不用写参数,可是它删除的不是最后一个,由于咱们说过字典没有顺序,因此 popitem 是随机删除一个,至于删除谁,彻底看命。
5.update
update 就是更细字典,参数能够是字典或者某种可迭代的对象,至于什么是可迭代这里你能够先知道这么个词,以后咱们会说到,它的返回值是 None,你也能够理解成没有返回值。
>>> my_dict = {'name':'rocky','like':'python'}
>>> first = {'age':23}
>>> my_dict.update(first)
>>> my_dict
{'name': 'rocky', 'like': 'python', 'age': 23}
>>> first
{'age': 23}
复制代码
字典的方法其实还有一个 copy 没讲,就是复制 ( 拷贝 ) 函数,原本像在这里写的,可是由于涉及到了浅拷贝和深拷贝,理解起来比较麻烦,再加上今天的内容已经够多了,因此我准备明天的文章专门写一下拷贝相关的内容。
更多内容,欢迎关注公众号「Python空间」,期待和你的交流。