00 写在前面
各位大大好,又到了新的一期文章更新之时,当然也又是一个周末来临时,小编在这里祝愿所有朋友都能够有一个开心愉快的周末时光。上一期文章中,小编讲解了怎么使用Python去开发一个裁剪PDF文件的App,但是因为文章在排版过程中出现了一些故障,使得最终通过手机阅读文章存在一定的不便(主要是Python代码阅读的不便),在这里,小编要先向各位朋友道一声歉,虽然小编不能保证以后不会出现这种情况(小编一直在摸索怎么更好的进行微信文章的排版,所以总会路遇坎坷),但是小编会尽量使得以后的文章少出现一些此类问题。这一期文章中,小编将继续Python基础知识的讲解,将重点讲解Python中的字典对象。本期文章的写作框架包含四部分:字典介绍、字典的创建和使用以及字典的常用方法三部分。好了,现在让我们进入主题。
01 字典——唯一的Python映射对象
先前文章中介绍的各种序列对象存在一个共同特征,就是引用时是通过索引编号来进行的,这就使得这些序列对象必须是按照一定的顺序进行组织,但是现实中,并不是所有数据都是这种组织形式,一些数据的引用要求能够根据名称来读取数据值,是不是很像数学中的函数,没错,这种引用方式就是映射(mapping),Python中就唯一存在着这样一种对象,那就是字典。
那么这种Python对象为什麼叫做字典呢?相信大家应该还记得新华字典的用法吧,在字典中如果需要查找一个汉字的意思,那么你肯定是按照字到含义的顺序去进行的吧,而Python中的这种对象引用方式就是这样,所以很简单地通过字面意思将这种对象命名为字典,这里你就应该再次感受到Python的简洁了吧。
既然知道了字典含义,那么不禁要问:为什麼要引入字典?这里通过一个例子来解释其必要。假如存在一个姓名列表names=['张三','李四','王五','赵六'],现在如果你想知道张三的电话号码,那么如果你采用列表的方式,那么你首先要在再定义一个电话号码列表phones=['0324','0934','1225','2354'](这里的号码是虚构的手机号码后四位),并且你必须确保号码存放的顺序和姓名存放的顺序一致。在创建完这个列表之后,你可以通过phones[name.index('张三')]这条命令获得张三的电话号码,虽然命令不是很长,但是真的很烦琐不是嘛。你肯定会想,是否存在这样一种命令方式phones['张三']就可以得到张三的号码呢?那这里小编就可以很明确地告诉你,完全可以,只要你掌握了字典。小编来告诉你怎样实现这一点,首先你只需要创建一个电话簿字典对象phonebooks={'张三':'0324','李四':'0934','王五': '1225','赵六':'2354'},然后你就可以通过phonebooks['张三']来获得张三的电话号码了,就是这么简单,所以你现在应该知道为什麼要引入字典了吧,字典的存在就是为了解决索引无法进行或者是通过索引进行不便的情形。
02 字典的创建与使用
既然知道了Python字典引入的必要,那么下面小编就介绍一些字典的创建以及使用。Python中字典的创建存在两种方法:{}以及使用函数dict()。小编分别对其进行说明。
1. 使用{}创建字典
上文中其实已经指出了怎么使用这种方式进行字典的创建,这里还是采用上文中的那个例子来进行说明。通过{}创建字典都是以下面这种方式:
phonebooks={'张三':'0324','李四':'0934','王五': '1225','赵六':'2354'}
字典由键及其相应的值组成,这种键-值对称为项(item)。在这个示例中,键为名字,而值为电话号码。每个键与其值之间都用冒号(:)分隔,项之间用逗号分隔,而整个字典放在花括号内。
2. 使用函数dict()创建字典
通过dict()创建字典的过程中,你既可以通过dict()作用到键-值类型的序列,也可以通过赋予dict()函数关键字实参来创建字典。如果你现在具有一个键-值对的序列对象:
items = [('name','张三'),('age','42')]
只需要使用dict(items)便可以得到{'name':'张三','age','42'}这样一个字典。
另外也可以通过对dict()函数赋予关键字实参进而创建字典:
Dict = dict(name='张三',age=42)
知道了怎么创建字典,接下来就要学会使用字典。这一部分首先介绍一些字典之中的基本操作方法(主要是与列表对比),下一部分介绍一些较为常用的字典操作方法。字典的基本操作在很多方面与列表类似:
len函数,用在列表中统计元素个数;用在字典中统计字典中项的数目;
Dict[k],用来返回字典中间为k的值;
Dict[k]=v,将值v关联给字典中的键k;
del Dict[k],删除字典中的键k以及相应的值
k in Dict,用于检查字典中是否存在键k
然而,绝对不要因为字典与列表的方法类似,就盲目地认为字典和列表相同。字典与列表还是存在一些不同之处的:
键的类型。字典中键的类型可以是整数,可以是非整数,甚至可以是各种字符,只要确保键的类型为不可变类型即可;但是列表之中的所以只能是整数,当然你会说可以对列表进行重新索引(朋友,我们这里讲的是默认,你和我扯高端操作,你不累吗)
自动添加。列表操作中是不可能给列表中不存在的元素进行赋值的,但是字典中完全可以给不存在的键赋值。例如如果存在一个列表List=[1,2,3],那么如果你想使用List[5]=4给List增加一项,Python只能给你一个白眼顺便给你弹出一段错误;然后如果你具有一个字典Dict={'name':'张三'},你完全可以通过Dict['age']=42给字典中增加一项。
成员资格的检查。列表中通过使用in函数是检查某个值是否存在于列表之中,但是字典中的in函数是检查某一个键是否存在于字典之中。
对于字典的创建与使用就讲到这里,下面给出一个字典的相关程序例子。在下一部分笔者将讲述一些字典中常用的方法。
# --------------代码清单1:字典示例--------------------------#
''' Theme : 一个简单的数据库;
Author : liupu
'''
# 这里创建一个嵌套字典,外层将人名用作键,然后对每一个人创建一个
# 字典,键分别为电话和地址
addressBook = {
'张三':{
'phone':'2345',
'Address':'九寨沟'
},
'李四':{
'phone':'9022',
'Address':'丽江古镇'
},
'王五':{
'phone':'0233',
'Address':'古东瀑布'
}
}
# 电话号码和地址的描述性标签,以供打印输出
labels = {'phone':'电话号码','Address':'地址'}
name = input('请输入需要查询人的名字:')
needs = input('查询其电话号码(p)还是地址(a):')
if needs == 'p': key = 'phone'
if needs == 'a': key = 'Address'
if name in addressBook :
print('{}'s {} is {}'.format(name,labels[key],addressBook[name][key]))
运行上述程序后应该会出现以下情况:
请输入需要查询人的名字:张三
查询其电话号码(p)还是地址(a):p
张三的电话号码2345
03 字典常用方法
与其它Python内置类型相似,字典中也有很多方法,但是相对于列表和字符串,字典的方法使用频率相对较低,但不得不说的确很有用,这里小编就主要讲解一下字典中常用的一些方法。
1. clear
方法clear用于删除字典之中的所有项,此种删除是对字典进行原地修改,并且不会返回结果。
Dict = {'name':'张三','age','42'}; Dict.clear(); Dict={}
2. copy
方法copy用于返回一个新字典,字典中包含的项与原来的字典完全相同,但是这种方法是形成了原来的字典的一个副本,因此对于新字典的任何操作都不会影响到原来的字典。
x = {'name':'张三','age':42} ; y = x.copy() ; y['addr'] = '鼓浪屿'
x = {'name':'张三','age':42}; y = {'name':'张三','age':42,'addr':'鼓浪屿'}
可以看出对于字典y增加了新的一项并不会影响字典x。
3. fromkeys
方法fromkeys创建一个新字典,其中包含指定的键,如果没有赋予这些键相应的值,则相应的值默认为None。
[In] {}.fromkeys('name','age'} [Out] {'name':None,'age':None}
[In] dict.fromkeys('name','age') [Out] {'name':None,'age':None}
[In] dict.fromkeys(['name','age'],['张三',42]) [Out] {'name':'张三', 'age':42}
4. get
get方法为引用字典中的键值提供了一种宽松的环境。如果你用常规的方法引用字典中的值,如果键不存在的话就会引发错误;但是如果你采用get方法引用的话,如果不存在某个键,会返回一个None值,当然你也可以通过为其指定默认值进而输出。
>> Dict = {'name':'张三','age':42}
>> print(Dict['address'])
Traceback (most recent call last):
File "", line 1, in ?
KeyError: 'address'
>> print(Dict.get('address'))
None
>> print(Dict.get('address','鼓浪屿'))
'鼓浪屿'
5. items
方法items用于返回一个包含所有字典项的列表,其中每一个元素都是键值对的形式,当然字典项在列表中的排序是随意的。
>> Dict = {'name':'张三','age':42}; Dict.items()
[('name','张三'),('age',42)]
6. keys
方法keys用来返回一个字典中的所有键。与之相类似的另外一个字典方法是values,仅仅通过字面意思就知道这个方法是返回字典中的值所形成的列表。
[In] Dict.keys() [Out] ['name','age']
7. pop
方法pop用于获取与指定键所对应的值,并将这一键值对从字典中删除。另外在字典中还有另外一个popitem方法,这一方法是在字典中随意删除一条项,有点类似于列表的pop方法,这里不再赘述。
>> Dict = {'name':'张三','age':42}
>> Dict.pop('name')
'张三'
{'age',42'}
8. update
方法update使用一个字典中的项来更新另一个字典。
>> Dict = {'name':'张三','age':42}
>> newDict = {'name':'李四'}
>> Dict.update(newDict)
{'name':'李四','age':42}
9. format_map
在讲解字符串的那期文章,小编介绍了可以通过format方法去进行字符串的格式设置,然后在字典中还存在另外一种更加简单的方法用来实现字符串的格式设置,那就是format_map方法。
>> phone = {'张三':'0231','李四':'0342','王五':'2346'}
>> '张三的电话是是'.format_map(phone)
张三的电话号码是0231
>> '李四与王五的电话号码分别是和'.format_map(phone)
李四与王五的电话号码分别是0342和2346
看到了吗,这就是采用format_map方法的简便之处,它不再需要你一定要写出绝对引用,仅仅通过输入字典,format_map便可以自动将其进行配对。
对于字典中的常用方法,小编就介绍到这里吧,更多方法可以参见相关的Python书籍,还是按句话,请按需学习。
本期文章写到这里就告一段落了,本期文章中小编主要对Python内置结构中的字典和集合进行了介绍,尤其是对字典对象进行了介绍,通过介绍,熟悉额字典操作的基本概念以及常用方法。下一期文章中,笔者准备继续介绍另外一项Python中的重要基础知识——语句。下一期文章将介绍Python中的条件与循环语句,敬请期待!
end
领取专属 10元无门槛券
私享最新 技术干货