字典是Python中常用的一种数据存储结构,它是由”键-值“对组成,每个”键-值“对称为一个元素,每个元素表示一种映射或对应关系。其中,”键“可以是Python中任意不可变数据,如整数、实数、复数、字符串、元组等类型,但不能使用列表、集合、字典或其他可变类型作为字典的”键“,”值“可以取任意数据类型。
一、字典的创建
字典的创建有3种方式:
1.直接赋值创建字典
直接赋值创建字典的一般格式为:
变量名 = {键1:值1,键2:值2,键3:值3,...}
字典的元素放在大括号中,元素之间用逗号分隔,”键“与”值“之间用冒号分隔。
>>> stu = {\'name\':\'张三\',\'num\':\'20012101\',\'sex\':\'female\'}
>>> stu
{\'name\': \'张三\', \'num\': \'20012101\', \'sex\': \'female\'}
tips:字典中元素打印出来的顺序与创建时的顺序不一定相同,这是因为字典中各个元素并没有前后顺序。
2.使用内置函数dict()创建字典
字典除了可以通过上述直接赋值的方法创建外,还可以用内置函数dict()通过其他”字典“、”(键,值)“对的序列或关键字参数来创建。
stu1 = {\'num\': \'20190101\', \'name\': \'张三\', \'sex\': \'male\'} # 直接赋值创建字典
stu2 = dict(stu1) # 通过其他字典创建
stu3 = dict([(\'num\', \'20190101\'), (\'name\', \'张三\'), (\'sex\', \'male\')]) # 通过”(键,值)“对的序列创建
stu4 = dict(num=\'20190101\', name=\'张三\', sex=\'male\') # 通过关键字参数创建
stu5 = dict(zip([\'num\', \'name\', \'sex\'], [\'20190101\', \'张三\', \'male\'])) # 通过dict和zip结合创建
if stu1 == stu2 == stu3 == stu4 == stu5: # 判断五个变量是否相同
print(\'创建的5种方式相同\')
else:
print("创建字典的5种方式不相同")
输出结果为:
创建的5种方式相同
tips:zip()函数将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的zip对象。
3.使用fromkeys()方法创建字典
在Python中,当所有键对应同一个值时,可使用fromkeys()方法创建字典。
语法格式为:
dict.fromkeys(seq[,value])
其中,seq为字典”键“值列表;value为设置键序列(seq)的值,省略时默认为None。
>>> stu_age = dict.fromkeys([\'zhangsan\',\'lisi\',\'wangwu\'],18) # 创建字典,“键”值默认为18
>>> stu_age
{\'zhangsan\': 18, \'lisi\': 18, \'wangwu\': 18}
>>> stu_age = dict.fromkeys([\'zhangsan\',\'lisi\',\'wangwu\']) # 创建字典,“键”值默认为None
>>> stu_age
{\'zhangsan\': None, \'lisi\': None, \'wangwu\': None}
tips:字典中的”键“是唯一的,创建字典时若出现”键“相同的情况,则后定义的”键-值“对将覆盖先定义的”键-值“对。
二、字典的访问
字典访问是根据指定”键“访问其对应的”值“,常见的访问方式有以下两种:
根据键访问值
字典中的每个元素表示一种映射关系,将提供的”键“作为下标可以访问对应的”值“,如果字典中不存在这个”键“则会抛出异常。
语法格式为:
字典变量名[键]
>>> stu = {\'name\':\'zhangsan\',\'num\':\'20190101\',\'sex\':\'male\'}
>>> stu[\'name\'] # 根据name访问姓名
\'zhangsan\'
>>> stu[\'num\']
\'20190101\'
使用get()方法访问值
在访问字典时,若不确定字典中是否有某个键,可通过get()方法进行获取,若该键存在,则返回其对应的值,若不存在,则返回默认值。
语法格式如下:
dict.get(key[,default=None])
其中,dict为被访问字典名;key是要查找的键;default定义默认值,如果指定键的值不存在,返回该默认值;当default为空时,返回None。
>>> stu.get(\'name\') # get()获取学生姓名
\'zhangsan\'
>>> stu.get(\'age\') # get()获取学生年龄,返回值为None
>>> print(stu.get(\'age\')) # 输出返回值None
None
>>> stu.get(\'age\',18) # 设置返回默认值为18
18
三、修改和添加元素
当以指定”键“为下标为字典元素赋值时,有两种含义:
(1)若该”键“在字典中存在,则表示修改该”键“对应的值;
(2)若该”键“在字典中不存在,则表示添加一个新的”键-值“对,也就是添加一个新元素到字典中。
>>> s = {0:\'0\',1:\'1\',2:\'2\'}
>>> s[0]=\'python\'
>>> s
{0: \'python\', 1: \'1\', 2: \'2\'}
>>> s[3]=\'love\'
>>> s
{0: \'python\', 1: \'1\', 2: \'2\', 3: \'love\'}
tips:数字作为键不用加引号表示。
四、删除元素
要删除字典中的元素或整个字典,可以使用del命令、clear()、pop()和popitem()方法。
1)del命令
del命令可根据”键“删除字典中的元素。
>>> s = {\'a\':\'I\',\'b\':\'love\',\'c\':\'python\'}
>>> del s[\'a\'] # 删除a及其值
>>> s
{\'b\': \'love\', \'c\': \'python\'}
2)clear()方法
clear()方法用于清除字典中的所有元素,语法格式为:
dict.clear()
其中,dict为要被清空的字典名;该方法中不含参数,也没有返回值。
>>> s = {0:\'I\',1:\'love\',2:\'python\'}
>>> s.clear() # 清空字典
>>> s
{}
3)pop()方法
pop()方法用于获取指定”键“的值,并将这个”键-值“对从字典中移除。其语法格式为:
dict.pop(key[,default])
其中,dict为要被删除元素的字典名;key是要被删除的键;default是默认值,当字典中没有要被删除的key时,该方法返回指定的默认值。
>>> s = {\'name\':\'zhangsan\',\'age\':\'17\'}
>>> s.pop(\'age\') # 返回并删除age"键-值"对
\'17\'
>>> s.pop(\'age\',18) # 无指定键,返回默认值18
18
4)popitem()方法
popitem()方法用于随机获取一个”键-值“对,并将其删除。其语法格式为:
dict.popitem()
其中,dict为要被删除元素的字典名;该方法无参数,返回值为一个随机的”键-值“对。
>>> s = {0:\'apple\',1:\'banana\',2:\'pear\'}
>>> s.popitem() # 随机返回某”键-值“对并删除
(2, \'pear\')
>>> s
{0: \'apple\', 1: \'banana\'}
五、删除字典
使用update()方法可以将新字典的”键-值“对一次性全部添加到当前字典中,如果两个字典中存在相同的”键“,则以新字典中的”值“为准更新当前字典。其语法格式为:
dict.update(dict2)
其中,dict为当前字典,dict2为新字典。
>>> s = {0:\'apple\',1:\'banana\',2:\'pear\'}
>>> s.update({3:\'peach\',1:\'a\'}) # 修改1的值,同时增加新元素
>>> s
{0: \'apple\', 1: \'a\', 2: \'pear\', 3: \'peach\'}
六、复制字典
复制字典可调用copy()方法,copy()方法返回字典的浅复制。其语法格式为:
dict.copy()
其中,dict为需要复制的字典,该方法无参数,返回值为一个新字典。
>>>s = {\'a\':\'apple\',\'b\':\'banana\'}
>>> s.copy()
{\'a\': \'apple\', \'b\': \'banana\'}
tips:在Python3中,可以用三种方法复制字典:直接赋值、浅复制和深复制。
(1)直接赋值:对象的引用
(2)浅复制(copy()方法):拷贝父对象,引用对象内部的子对象
(3)深复制(deepcopy()方法):copy模块的deepcopy()方法,完全复制父对象及其子对象。
七、字典的遍历
遍历字典的”键-值“对
遍历字典中所有的”键-值“对需要用到items()方法,该方法以列表形式返回可遍历的”(键,值)“元组。其语法格式为:
dict.items()
其中,dict表示字典名,该方法没有参数。
>>> a = {\'mary\':\'C\',\'lina\':\'A\',\'lisa\':\'B\'}
>>> a.items()
dict_items([(\'mary\', \'C\'), (\'lina\', \'A\'), (\'lisa\', \'B\')])
遍历字典中所有的键
当不需要遍历字典中的值时,可使用keys()只需要遍历字典中的键,该方法以列表返回一个字典中所有的键。其语法格式为:dict.keys()
其中,dict表示字典名,该方法没有参数。
>>> a = {\'mary\':\'C\',\'lina\':\'A\',\'lisa\':\'B\'}
>>> a.keys()
dict_keys([\'mary\', \'lina\', \'lisa\'])
遍历字典中所有的值
当只关心字典所包含的值时,可使用values()方法,该方法以列表形式返回字典中所有的值。其语法格式为:
dict.values()
其中,dict表示字典名,该方法没有参数。
>>> a = {\'mary\':\'C\',\'lina\':\'A\',\'lisa\':\'B\'}
>>> a.values()
dict_values([\'C\', \'A\', \'B\'])