The 字典是Python内置的mapping类型。词典地图keys to values这些键值对提供了一种在 Python 中存储数据的有用方法。
字典通常用于保存相关数据,例如 ID 或用户配置文件中包含的信息,字典的两侧都带有花括号{
}
.
Info:要按照本教程中的示例代码进行操作,请通过运行以下命令在本地系统上打开 Python 交互式 shellpython3
命令。然后,您可以复制、粘贴或编辑示例,方法是将它们添加到>>>
prompt.
字典看起来像这样:
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
除了花括号之外,还有冒号 (:
)贯穿整个词典。
冒号左边的单词是键。Keys可以由任何不可变数据类型组成。上面字典中的键是:
'username'
'online'
'followers'
上例中的每个键都是string values.
冒号右侧的单词是值。Values可以由任何数据类型组成。上面字典中的值是:
这些值中的每一个都是一个字符串,Boolean, or integer.
让我们打印出字典sammy
:
Output
{'username': 'sammy-shark', 'followers': 987, 'online': True}
查看输出,键值对的顺序可能发生了变化。在 Python 3.5 及更早版本中,字典数据类型是无序的。但是,在 Python 3.6 及更高版本中,字典数据类型仍然是有序的。无论字典是否有序,键值对都将保持不变,使我们能够根据数据的关系含义来访问数据。
您应该在计算机或服务器上安装 Python 3 并设置编程环境。如果您还没有设置编程环境,可以参考安装和设置指南本地编程环境或对于一个服务器上的编程环境适合您的操作系统(Ubuntu、CentOS、Debian 等)
我们可以通过引用相关的键来调用字典的值。
由于字典提供用于存储数据的键值对,因此它们可能是 Python 程序中的重要元素。
如果我们想隔离 Sammy 的用户名,我们可以通过调用sammy['username']
。让我们打印出来:
Output
sammy-shark
字典的行为类似于数据库,因为您不必像使用列表那样调用整数来获取特定索引值,而是将值分配给键并可以调用该键来获取其相关值。
通过调用密钥'username'
我们收到该键的值,即'sammy-shark'
.
中的剩余值sammy
可以使用相同的格式类似地调用字典:
sammy['followers']
# Returns 987
sammy['online']
# Returns True
通过使用字典的键值对,我们可以引用键来检索值。
除了使用键来访问值之外,我们还可以使用一些内置方法:
-
dict.keys()
隔离按键
-
dict.values()
隔离值
-
dict.items()
返回列表格式的项目(key, value)
元组对
要返回密钥,我们将使用dict.keys()
方法。在我们的示例中,这将使用变量名称并且是sammy.keys()
。让我们将其传递给print()
方法并查看输出:
Output
dict_keys(['followers', 'username', 'online'])
我们收到的输出将键放置在可迭代视图对象中dict_keys
班级。然后以列表格式打印密钥。
该方法可用于跨词典查询。例如,我们可以看一下两个字典数据结构之间共享的公共键:
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}
for common_key in sammy.keys() & jesse.keys():
print(sammy[common_key], jesse[common_key])
词典sammy
和字典jesse
每个都是一个用户配置文件字典。
然而,他们的个人资料具有不同的键,因为萨米有一个带有相关关注者的社交个人资料,而杰西有一个带有相关积分的游戏个人资料。他们有两个共同点:username
and online
status,当我们运行这个小程序时我们可以找到它:
Output
sammy-shark JOctopus
True False
我们当然可以改进程序,使输出更易于用户阅读,但这说明了这一点dict.keys()
可用于检查各种词典,看看它们有哪些共同点或不同点。这对于大型词典特别有用。
同样,我们可以使用dict.values()
方法来查询值sammy
字典,它将被构造为sammy.values()
。让我们把它们打印出来:
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
print(sammy.values())
Output
dict_values([True, 'sammy-shark', 987])
两种方法keys()
and values()
返回中存在的键和值的未排序列表sammy
字典与视图对象dict_keys
and dict_values
分别。
如果我们对字典中的所有项目感兴趣,我们可以使用items()
method:
Output
dict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])
返回的格式是由以下内容组成的列表(key, value)
元组对与dict_items
查看对象。
我们可以使用迭代返回的列表格式for
环形。例如,我们可以打印出给定字典的每个键和值,然后通过添加字符串使其更易于阅读:
for key, value in sammy.items():
print(key, 'is the key for the value', value)
Output
online is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark
The for
上面的循环迭代了其中的项目sammy
字典并逐行打印出键和值,并提供信息以使其更容易被人类理解。
我们可以使用内置方法来访问字典数据结构中的项、值和键。
字典是一种可变的数据结构,因此您可以修改它们。在本节中,我们将介绍添加和删除字典元素。
在不使用方法或函数的情况下,您可以使用以下语法将键值对添加到字典中:
我们将通过向名为的字典添加键值对来了解它在实践中的工作原理usernames
:
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
usernames['Drew'] = 'squidly'
print(usernames)
Output
{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
我们现在看到字典已经更新了'Drew': 'squidly'
键值对。由于字典可能是无序的,因此该对可能出现在字典输出中的任何位置。如果我们使用usernames
字典稍后在我们的程序文件中,它将包含附加的键值对。
此外,此语法可用于修改分配给键的值。在这种情况下,我们将引用现有的键并向其传递不同的值。
让我们考虑一个字典drew
这是给定网络上的用户之一。我们会说这个用户今天的关注者数量增加了,所以我们需要更新传递给'followers'
钥匙。我们将使用print()
函数来检查字典是否被修改。
drew = {'username': 'squidly', 'online': True, 'followers': 305}
drew['followers'] = 342
print(drew)
Output
{'username': 'squidly', 'followers': 342, 'online': True}
在输出中,我们看到追随者的数量从整数值跃升305
to 342
.
我们可以使用此方法通过用户输入将键值对添加到字典中。让我们编写一个快速程序,usernames.py
在命令行上运行并允许用户输入以添加更多名称和关联的用户名:
用户名.py
# Define original dictionary
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
# Set up while loop to iterate
while True:
# Request user to enter a name
print('Enter a name:')
# Assign to name variable
name = input()
# Check whether name is in the dictionary and print feedback
if name in usernames:
print(usernames[name] + ' is the username of ' + name)
# If the name is not in the dictionary...
else:
# Provide feedback
print('I don\'t have ' + name + '\'s username, what is it?')
# Take in a new username for the associated name
username = input()
# Assign username value to name key
usernames[name] = username
# Print feedback that the data was updated
print('Data updated.')
让我们在命令行上运行该程序:
当我们运行该程序时,我们将得到类似以下的输出:
Output
Enter 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()
method可以在列表中找到。
In the jesse
下面的字典,让我们添加键'followers'
并给它一个整数值jesse.update()
。接下来,让我们print()
更新后的词典。
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}
jesse.update({'followers': 481})
print(jesse)
Output
{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}
从输出中我们可以看到我们已经成功添加了'followers': 481
字典的键值对jesse
.
我们还可以使用dict.update()
方法通过替换特定键的给定值来修改现有键值对。
让我们将 Sammy 的在线状态更改为True
to False
in the sammy
字典:
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
sammy.update({'online': False})
print(sammy)
Output
{'username': 'sammy-shark', 'followers': 987, 'online': False}
线路sammy.update({'online': False})
引用现有密钥'online'
并修改其布尔值True
to False
。当我们打电话给print()
字典中,我们看到输出中发生了更新。
要将项目添加到字典或修改值,我们可以使用dict[key] = value
语法或方法dict.update()
.
正如您可以添加键值对并更改字典数据类型中的值一样,您也可以删除字典中的项目。
要从字典中删除键值对,我们将使用以下语法:
让我们以jesse
代表用户之一的字典。我们会说 Jesse 不再使用在线平台玩游戏,因此我们将删除与'points'
钥匙。然后,我们将打印字典以确认该项目已被删除:
jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}
del jesse['points']
print(jesse)
Output
{'online': False, 'username': 'JOctopus', 'followers': 481}
线路del jesse['points']
删除键值对'points': 723
来自jesse
字典。
如果我们想清除字典中的所有值,我们可以使用dict.clear()
方法。这将保留给定的字典,以备我们稍后在程序中需要使用它,但它将不再包含任何项目。
让我们删除其中的所有项目jesse
字典:
jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}
jesse.clear()
print(jesse)
Output
{}
输出显示我们现在有一个没有键值对的空字典。
如果我们不再需要特定的字典,我们可以使用del
完全摆脱它:
当我们调用print()
删除后jesse
字典,我们会收到以下错误:
Output
...
NameError: name 'jesse' is not defined
由于字典是可变数据类型,因此可以添加、修改以及删除和清除它们。
本教程介绍了 Python 中的字典数据结构。字典由键值对组成,提供了一种不依赖索引来存储数据的方法。这使我们能够根据值的含义以及与其他数据类型的关系来检索值。
从这里,您可以在我们的“了解数据类型“ 教程。
您可以看到编程项目中使用的字典数据类型,例如使用 Scrapy 进行网页抓取.