如果需要将一组值组合成一个数据结构,并通过下标(或编号)来访问各个值,那么列表会很有用。本章将介绍一种可通过名称来访问其各个值的数据结构,这种数据结构称为 “映射(mapping)”。
字典是 Python 中唯一的内置映射类型,它的值不按顺序排列,而是存储在对应的名称下面。
Python 字典的定义
字典,顾名思义就是一种类似于《英汉字典》那样的数据结构。如果使用《英汉字典》,我们可以通过单词找到对应的汉语解释。而使用 Python 中的字典,我们可以通过 “键”(key)来查找 “值”(value)。

举个简单例子,网站会使用一个表来存储用户信息,像用户表中的名字和 ID,使用字典表示如下:
users = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}在该字典中,'Jack'、'Lucy'、'Tony' 这几个就是键(key),而 1001、1002、1003 这几个就是值(value)。你可以通过用户的名字找到其对应的 ID。
所谓的字典,其实是由一对对的 “键: 值” 组合而成的。每一个键都跟一个值相关联,你可以通过键来访问与之对应的值。在很多情况下,使用字典比使用列表更合适。下面是 Python 字典的一些用途。
- 保存用户的电话号码,其中键是用户名,值是电话号码。
- 存储文件的修改时间,其中键是文件名,值是修改时间。
- 表示棋盘的状态,其中键是由坐标组成的元组,值是状态。
Python 创建字典
在 Python 中,我们可以使用大括号 “{}” 来创建一个字典。
语法:
dictname = {key1: value1, key2: value2, ... , keyN: valueN}说明:
字典是由多个 “键值对” 组成的。键与值之间用英文冒号 “:” 分开,然后键值对之间用英文逗号 “,” 隔开。
键值对是两个相关的值,你可以使用键来访问对应的值,与键相关联的值可以是数字、字符串、列表乃至字典。事实上,你可以将任何 Python 对象作为字典中的值。
对于 Python 中的字典,小伙伴们需要特别注意以下 3 点。
- 键(key)必须是唯一的,字典中不能出现重复的键。
- 键(key)必须是不可变的,可以使用数字、字符串或元组,但不能使用列表。
- 值(value)可以不唯一,可以是任意数据类型(包括数字、字符串、列表、元组和字典)。
示例 1:创建字典
# 创建一个空字典
users = {}
# 创建包含 3 个键值对的字典
users = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003} 注意: 请不要使用 “dict” 作为字典名,因为它跟 Python 内置的 dict() 函数冲突,可能会导致一些难以发现的问题。
Python 字典的基本操作
与 Python 列表 相似,对于字典键值对的基本操作,主要有 4 种:获取某个键的值、修改某个键的值、添加键值对、删除键值对。
1. 字典获取某个键的值
在 Python 中,如果想要获取字典中某一个键的值,有 2 种方式可以实现:一种是使用 dict[key],另一种是使用 get() 方法。
语法:
dictname[key]
dictname.get(key)说明:
dict 表示字典名,key 表示键。对于 dict[key] 方法来说,如果字典中存在该键,则返回对应的值;如果字典不存在该键,则会报错。对于 dict.get() 方法来说,如果字典中存在该键,则返回对应的值;如果字典中不存在该键,则返回 None。
示例 2:使用 dict[key]
users = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}
print(users['Lucy'])
print(users['Lily'])运行结果如下。
1002
(报错)KeyError: 'Lily'示例 3:使用 get() 方法
users = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}
print(users.get('Lucy'))
print(users.get('Lily'))运行结果如下。
1002
None分析:
如果你可以确定字典某个键是存在的,那么一般都是使用 dict[key] 这种方式来获取该键的值。但如果指定的键可能不存在时,你应该考虑使用 dict.get(key) 这种方式。因为如果键不存在,使用 dict[key] 这种方式会直接报错。
2. 字典修改某个键的值
获取字典的某一键的值我们是知道了,但如果想要给某一个键赋一个新值,此时又应该怎么做呢?在 Python 中,我们也是通过 dict[key] 这种方式来实现的。
语法:
dictname[key] = value示例 4:修改值
users = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}
users['Tony'] = 6666
print(users)运行结果如下。
{ 'Jack': 1001, 'Lucy': 1002, 'Tony': 6666 }分析:
在上面示例中,users['Tony'] = 6666 表示给 'Tony' 这个键重新赋值为 6666,也就是 1003 被替换成了 6666。
3. 字典增加键值对
在 Python 中,如果想要为字典增加一个新的键值对,也是使用 dict[key] 这种方式来实现。
语法:
dict[key] = value示例 5:增加新的键值对
users = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}
users['Lily'] = 1004
print(users)运行结果如下。
{'Jack': 1001, 'Lucy': 1002, 'Tony': 1003, 'Lily': 1004}分析:
获取值、修改值、增加键值对,我们都是使用 dict[key] 这种方式来实现的。
注意: 从 Python 3.7 之后,字典中元素的排列顺序与定义时的相同。如果将字典打印出来,将发现元素的排列顺序与添加顺序相同。
4. 字典删除键值对
与列表一样,我们也是使用 del 关键字来删除字典中的键值对。
语法:
del dict[key]示例 6:删除键值对
users = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}
del users['Jack']
print(users)运行结果如下。
{'Lucy': 1002, 'Tony': 1003}Python 字典的方法
Python 为字典提供了非常多有用的方法,如下表所示。
| 方法 | 说明 |
|---|---|
| get() | 获取指定键的值,键不存在时返回默认值 |
| update() | 用另一个字典或键值对更新当前字典 |
| pop() | 删除指定键,并返回其值 |
| popitem() | 删除最后插入的键值对,并返回该键值对 |
| keys() | 返回字典所有 “键” 的视图 |
| values() | 返回字典所有 “值” 的视图 |
| items() | 返回字典所有 “键值对” 的视图 |
| fromkeys() | 用给定键创建新字典,值相同 |
| setdefault() | 获取键的值,不存在则设置默认值 |
| copy() | 返回字典的浅拷贝 |
| clear() | 清空字典所有键值对 |
