介绍
字典是 Python 内置的 映射 类型。字典将 键 映射到 值,这些键值对提供了一种在 Python 中存储数据的有用方式。
通常用于保存相关的数据,例如 ID 或用户配置文件中包含的信息,字典使用花括号 {
}
来构造。
信息:要跟随本教程中的示例代码,可以通过运行 python3
命令在本地系统上打开 Python 交互式 shell。然后,您可以在 >>>
提示符之后复制、粘贴或编辑示例。
A dictionary looks like this:
除了花括号之外,字典中还有冒号(:
)。
冒号左侧的词是键。键可以由任何不可变数据类型组成。上述字典中的键为:
'username'
'online'
'followers'
上面示例中的每个键都是 字符串 值。
冒号右侧的词是值。值可以由任何数据类型组成。上述字典中的值为:
'sammy-shark'
True
987
让我们打印字典sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}
通过输出,我们可以看到键-值对的顺序可能已经发生了变化。在Python版本3.5及之前,字典数据类型是无序的。但是,在Python版本3.6及之后,字典数据类型保持有序。无论字典是否有序,键-值对都将保持不变,使我们能够根据它们的关系意义访问数据。
先决条件
您应该已经安装了Python 3,并在计算机或服务器上设置了编程环境。如果您尚未设置编程环境,您可以参考适用于您操作系统(Ubuntu、CentOS、Debian等)的本地编程环境或服务器上的编程环境的安装和设置指南。
访问字典元素
我们可以通过引用相关键来调用字典的值。
使用键访问数据项
由于字典提供了用于存储数据的键值对,它们可以成为您的Python程序中的重要元素。
如果我们想要分离出Sammy的用户名,我们可以通过调用sammy['username']
来实现。让我们打印出来:
Outputsammy-shark
字典的行为类似于数据库,不同之处在于,与使用列表获取特定索引值的整数不同,您将一个值分配给一个键,并且可以调用该键以获取其相关值。
通过调用键'username'
,我们接收到该键的值,即'sammy-shark'
。
可以类似地使用相同的格式调用sammy
字典中的其余值:
通过利用字典的键值对,我们可以引用键来检索值。
使用方法访问元素
除了使用键来访问值之外,我们还可以使用一些内置方法:
dict.keys()
隔离键dict.values()
隔离值dict.items()
以列表格式返回项,形如(key, value)
元组对
要返回键,我们可以使用 dict.keys()
方法。在我们的示例中,这将使用变量名,并且是 sammy.keys()
。让我们将其传递给一个 print()
方法并查看输出:
Outputdict_keys(['followers', 'username', 'online'])
我们收到的输出将键放在 dict_keys
类的可迭代视图对象中。然后以列表格式打印出键。
这种方法可用于跨字典查询。例如,我们可以查看两个字典数据结构之间共享的常见键:
字典 sammy
和字典 jesse
各自都是用户配置文件字典。
他们的配置文件有不同的键,因为 Sammy 有一个带有关联关注者的社交配置文件,而 Jesse 有一个带有关联积分的游戏配置文件。他们共有的 2 个键是 username
和 online
状态,在我们运行这个小程序时可以找到:
Outputsammy-shark JOctopus
True False
我们肯定可以改进程序,使输出更易于阅读,但这说明dict.keys()
可以用于检查各个字典之间的共同之处或不同之处。这对于大型字典特别有用。
类似地,我们可以使用dict.values()
方法查询sammy
字典中的值,构造为sammy.values()
。让我们打印出来:
Outputdict_values([True, 'sammy-shark', 987])
这两种方法keys()
和values()
返回sammy
字典中的键和值的未排序列表,分别为dict_keys
和dict_values
的视图对象。
如果我们对字典中的所有项目感兴趣,可以使用items()
方法访问它们:
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])
返回的格式是一个由(key, value)
元组对组成的列表,带有dict_items
视图对象。
我们可以使用for
循环迭代返回的列表格式。例如,我们可以打印出给定字典的每个键和值,然后通过添加字符串使其更易于人们理解:
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark
上面的for
循环迭代了sammy
字典中的项目,并逐行打印出键和值,提供了一些信息,以便人们更容易理解。
我们可以使用内置方法从字典数据结构中访问项目、值和键。
修改字典
字典是一种可变数据结构,因此您可以修改它们。在本节中,我们将介绍如何添加和删除字典元素。
添加和更改字典元素
在不使用方法或函数的情况下,您可以使用以下语法向字典添加键值对:
我们将通过向名为usernames
的字典添加一个键值对来看看这是如何实现的:
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
现在我们看到字典已更新为包含'Drew': 'squidly'
键值对。由于字典可能是无序的,因此此对可能出现在字典输出的任何位置。如果我们稍后在程序文件中使用usernames
字典,它将包含额外的键值对。
此外,此语法可用于修改分配给键的值。在这种情况下,我们将引用现有的键并将不同的值传递给它。
让我们考虑一个名为drew
的字典,它是给定网络上的一个用户。我们将说这个用户今天获得了更多的粉丝,所以我们需要更新传递给'followers'
键的整数值。我们将使用print()
函数来检查字典是否已被修改。
Output{'username': 'squidly', 'followers': 342, 'online': True}
在输出中,我们看到粉丝的数量从整数值305
跳到了342
。
我们可以使用这种方法来向具有用户输入的字典添加键值对。让我们编写一个快速的程序usernames.py
,它在命令行上运行,并允许用户输入更多的名称和关联的用户名:
让我们在命令行上运行该程序:
当我们运行程序时,我们会得到类似以下的输出:
OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:
当我们测试程序完成后,我们可以按下CTRL + C
来退出程序。你可以设置一个触发器来退出程序(比如输入字母q
),并使用条件语句来改进代码。
这展示了如何通过交互式方式修改字典。对于这个特定的程序,一旦你用CTRL + C
退出程序,除非你实现一种处理读写文件的方法,否则你将会丢失所有数据。
我们也可以使用dict.update()
方法来添加和修改字典。这与列表中可用的append()
方法不同。
在下面的jesse
字典中,让我们添加键'followers'
并给它一个整数值,使用jesse.update()
。随后,让我们print()
更新后的字典。
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}
从输出中,我们可以看到我们成功地将'followers': 481
键值对添加到了字典jesse
中。
我们也可以使用dict.update()
方法来修改现有的键值对,通过替换特定键的给定值。
让我们将 Sammy 的在线状态从 True
改为 False
在 sammy
字典中:
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}
行 sammy.update({'online': False})
引用了现有的键 'online'
并将其布尔值从 True
修改为 False
。当我们调用 print()
函数打印字典时,我们可以看到更新在输出中生效了。
要向字典添加项目或修改值,我们可以使用 dict[key] = value
语法或 dict.update()
方法。
删除字典元素
就像您可以在字典数据类型中添加键值对和更改值一样,您也可以删除字典中的项目。
要从字典中删除键值对,我们将使用以下语法:
让我们以代表其中一个用户的 jesse
字典为例。我们将说 Jesse 不再使用在线平台玩游戏,所以我们将删除与 'points'
键相关联的项目。然后,我们将打印出字典来确认该项已被删除:
Output{'online': False, 'username': 'JOctopus', 'followers': 481}
行 del jesse['points']
从 jesse
字典中删除了键值对 'points': 723
。
如果我们想清空一个字典的所有值,我们可以使用 dict.clear()
方法。这将保留给定的字典,以防我们稍后需要在程序中使用它,但它将不再包含任何项。
让我们清空 jesse
字典中的所有项:
Output{}
输出显示我们现在有一个空的字典,不包含任何键值对。
如果我们不再需要一个特定的字典,我们可以使用 del
完全摆脱它:
当我们删除 jesse
字典后运行调用 print()
,我们会收到以下错误:
Output...
NameError: name 'jesse' is not defined
因为字典是可变数据类型,可以向其添加、修改和删除项以及清空。
结论
本教程介绍了 Python 中的字典数据结构。字典由键-值对组成,并提供一种存储数据的方式,而不依赖于索引。这使我们能够根据其含义和与其他数据类型的关系检索值。
从这里,您可以在我们的“理解数据类型”教程中了解更多关于其他数据类型的信息。
你可以在编程项目中看到字典数据类型的使用,比如使用Scrapy进行网络抓取。
Source:
https://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3