字典的基本操作

字典是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对象。

点这看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()方法,完全复制父对象及其子对象。

点此查看Python 直接赋值、浅拷贝和深度拷贝解析

七、字典的遍历

遍历字典的”键-值“对

遍历字典中所有的”键-值“对需要用到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'])
posted @ 2021-10-17 15:12  Cara_Smith  阅读(870)  评论(0编辑  收藏  举报