Python 3.8从零开始学
上QQ阅读APP看书,第一时间看更新

5.2.2 字典的基本操作

字典的基本操作大部分与序列(sequence)类似,字典有修改、删除等基本操作。下面逐一进行具体的讲解。

1.修改字典

字典的修改包括字典的更新和新增两个操作。

字典的更新,是指对已有键值对进行修改,操作结果是保持现有键值对数量不变,但其中某个或某几个的键、值或键值发生了变更。

字典的新增,指的是向字典添加新内容,操作的结果是在字典中增加至少一个新的键值对,键值对数量会比新增之前至少多一个。

字典的更新和新增操作示例如下:

>>> student={'小萌':'000','小智':'001','小强':'002'}
>>> print(f'更改前,student:{student}')
更改前,student:{'小萌': '000', '小智': '001', '小强': '002'}
>>> xiaoqiang_num=student['小强']
>>> print(f'更改前,小强的序号是:{xiaoqiang_num}')
更改前,小强的序号是:002
>>> student['小强']='005'  #更新小强的序号为005
>>> xiaoqiang_num=student['小强']
>>> print(f'更改后,小强的序号是:{xiaoqiang_num}')
更改后,小强的序号是:005
>>> print(f'更改后,student:{student}')
更改后,student:{'小萌': '000', '小智': '001', '小强': '005'}
>>> student['小张']='003'  #添加一个学生
>>> xiaozhang_num=student['小张']
>>> print(f'小张的序号是:{xiaozhang_num}')
小张的序号是:003
>>> print(f'添加小张后,student:{student}')
添加小张后,student:{'小萌': '000', '小智': '001', '小强': '005', '小张': '003'}

由输出结果可以看到,对字典的修改和添加操作均成功。

2.删除字典元素

此处字典元素的删除指的是显式删除,显式删除一个字典元素用del命令,操作示例如下:

>>> student={'小强': '002', '小萌': '000', '小智': '001', '小张': '003'}
>>> print(f'删除前:{student}')
删除前:{'小强': '002', '小萌': '000', '小智': '001', '小张': '003'}
>>> del student['小张']  #删除 键值为“小张”的键
>>> print(f'删除后:{student}')
删除后:{'小强': '002', '小萌': '000', '小智': '001'}

由输出结果可以看到,变量student在删除前有一个键为小张,值为003的元素,执行删除键为小张的操作后,键为小张,值为003的元素就不存在了,即对应键值对被删除了。所以在字典中,可以通过删除键来删除一个字典元素。

在Python中,除了可以删除键,还可以直接删除整个字典,例如:

>>> student={'小强': '002', '小萌': '000', '小智': '001', '小张': '003'}
>>> print(f'删除前:{student}')
删除前:{'小强': '002', '小萌': '000', '小智': '001', '小张': '003'}
>>> del student  #删除整个字典
>>> print(f'删除后:{student}')
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
print(f'删除后:{student}')
NameError: name 'student' is not defined

由输出结果可以看到,通过删除变量student,就删除了整个字典。字典删除后就不能进行访问了,这是因为执行del操作后,字典就不存在了,字典变量(如上面的student变量)也不存在了,继续访问不存在的变量,就会报变量没有定义的错误。

3.字典键的特性

在Python中,字典中的值可以没有限制地取任何值,既可以是标准对象,也可以是用户定义的对象,但键不行。

对于字典,需要强调以下两点:

(1)在一个字典中,不允许同一个键出现两次,即键不能相同。创建字典时如果同一个键被赋值两次或以上,则最后一次的赋值会覆盖前一次的赋值,示例如下:

>>> student={'小萌': '000', '小智': '001', '小萌': '002'}  #小萌赋两次值,第一次000,第二次002
>>> print(f'学生信息:{student}')
学生信息:{'小萌': '002', '小智': '001'}   #输出结果中小萌的值为002

由输出结果可以看到,示例中对键为小萌的元素做了两次赋值操作,但输出结果中只有一个键为小萌的元素,并且对应值为第二次的赋值。

(2)字典中的键必须为不可变的,可以用数字、字符串或元组充当,但不能用列表,示例   如下:

>>> student={('name',):'小萌','number':'000'}
>>> print(f'学生信息:{student}')
学生信息:{('name',): '小萌', 'number': '000'}
>>> student={['name']:'小萌','number':'000'}
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
student={['name']:'小萌','number':'000'}
TypeError: unhashable type: 'list'

由输出结果可以看到,在字典中,可以使用元组做键,因为元组是不可变的。但不能用列表做键,因为列表是可变的,使用列表做键,运行时会提示类型错误。

4.len函数

在字典中,len()函数用于计算字典中元素的个数,也可以理解为字典中键的总数,示例如下:

>>> student={'小萌': '000', '小智': '001', '小强': '002','小张': '003', '小李': '004'}
>>> print(f'字典元素个数为:{len(student)}')
字典元素个数为:5

由输出结果可以看到,通过使用len()函数,得到字典student变量中的元素个数为5。

5.type函数

type()函数用于返回输入的变量的类型,如果输入变量是字典就返回字典类型,示例如下:

>>> student={'小萌': '000', '小智': '001', '小强': '002','小张': '003', '小李': '004'}
>>> print(f'字典的类型为:{type(student)}')
字典的类型为:<class 'dict'>

由输出结果可以看到,通过type()函数得到student变量的类型为字典(dict)类型。