Python版本:3.6.2 操做系统:Windows 做者:SmallWZQ算法
知识源于生活。Python也是如此。数据结构
提到字典,我首先想到的是数学大师——高斯。app
为什么想起他呢?这主要是由于高斯算法嘛。计算1+2+3+...+100,通常人都会从1一直加到100,而高斯却另辟蹊径,找到规律,从而发现“高斯算法”。高斯算法极大地提升运算效率。对于Python中的字典,它与高斯算法殊途同归,一样能提升键值对的查找效率。spa
映射(mapping):经过名字来引用值的数据结构。操作系统
字典是Python中惟一内建的映射类型。字典的键值对(Key-Values),键是不可变的,能够为字符串、数字(int、float......)、元组等等。code
字典中的键是惟一的,而值却能够相同。blog
Python格式以下:内存
1 phone = {'Jack':'0571','James':'7856','Paul':'2364'} #大括号,且键值对之间用冒号(:)隔开
注:对于上面的代码,可能有读者会疑问:为何用字符串表示电话号码呢?字符串
主要是考虑以“0”开头的电话号码。定义电话号码时,以“0”开头会显示错误(Error)。所以,为了考虑周全,字典中电话号码应表示为数字字符串,而不是整数。get
图1 电话号码错误示例
1.建立字典和访问元素
建立方式以下:
d = {'a':'97','b':'98','c':'99','c':'101'} print(d)
d['a']
'97'
注:字典中即便键相同,也只会输出其中一个(若Key相同,后面的值(Value)会把前面的覆盖掉)。
2.添加元素
字典没有insert()方法,但依然可以添加元素。
d = {'a':'98','b':'99','c':'100'} d['d'] = '101' print(d)
3.删除元素
字典中删除元素,使用pop()方法。pop()方法用于得到对应于给定键的值,并将该键值对从字典中移除。
d ={‘a':'97','b':'98','c':'99'} d.pop('b') '98' print(d) {‘a':'97','c':'99'}
注:除了pop()方法,还可使用del方法
4.修改元素
字典中的元素如何修改呢?很简单,直接经过Key修改Value。
d ={‘a':'97','b':'98','c':'99'} d['b'] = '200' print(d['b']) '200' print(d) d ={‘a':'97','b':'200','c':'99'}
5.查找元素
字典中查找元素与修改元素相似,也是经过Key来查找字典中的Value。
d ={‘a':'97','b':'98','c':'99'} d['b'] '98' d['c'] '99'
若是字典中没有该Key时,dict会报错。
图2 错误提示(KeyError)
如何避免Key不存在的错误呢?
1.经过k in d,判断Key是否在dict中:
‘a’ in d True 'f' in d False
2.get()方法用于更宽松的访问字典项的方法。若是Key不存在,使用get()没有任何异常,仅仅返回None值:
图3 get()方法示例
注:经过d.get('f','120')并不能往字典d ={}中添加键-值对。
6.字典基本操做总结
♦len(d):返回d中键-值对的数量;
♦d[k]:返回关联到键K上的值(Value);
♦d[k] = V:将值V关联到将K上;
♦del d[k]:删除键为K的项;
♦K in d:检查d中是否含有键K的元素;
♦键K类型:字符串、数字或元组,符合条件的不可变类型都可;
♦字典格式化字符串:%(Jack)s %(phone)。【其中Jack为键,而phone为dict{}】
其实,元组不必定能够用于dict的键(Key):
d ={‘a':'97','b':'98','c':'99'} d[(1,2,3,4,5,6)] = '121' print(d) d ={‘a':'97','b':'98','c':'99',(1,2,3,4,5,6):'121'} d[(1,2,[1,2,3])] = '188' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
注:若是元组用于键,元组中不能含有可变内容list,不然编译错误。
字典总结:
1.字典中元素必须以键值对的形式出现;
2.字典中的键必须是不可变的,能够是字符串、数字以及元组,而且没法修改;
3.Key是惟一的,不可重复,而Value能够重复;
4.字典查找和插入元素极快,并不会随着Key增长而减慢;
5.字典占用内存大,以空间换取时间;
6.特别地,当tuple做为字典中的键(Key)时,tuple中不能包含list,不然编译错误。