字典是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'])