理解 Python 3 中的字典

2023-11-08

介绍

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可以由任何数据类型组成。上面字典中的值是:

  • 'sammy-shark'
  • True
  • 987

这些值中的每一个都是一个字符串,Boolean, or integer.

让我们打印出字典sammy:

print(sammy)
Output
{'username': 'sammy-shark', 'followers': 987, 'online': True}

查看输出,键值对的顺序可能发生了变化。在 Python 3.5 及更早版本中,字典数据类型是无序的。但是,在 Python 3.6 及更高版本中,字典数据类型仍然是有序的。无论字典是否有序,键值对都将保持不变,使我们能够根据数据的关系含义来访问数据。

先决条件

您应该在计算机或服务器上安装 Python 3 并设置编程环境。如果您还没有设置编程环境,可以参考安装和设置指南本地编程环境或对于一个服务器上的编程环境适合您的操作系统(Ubuntu、CentOS、Debian 等)

访问字典元素

我们可以通过引用相关的键来调用字典的值。

使用键访问数据项

由于字典提供用于存储数据的键值对,因此它们可能是 Python 程序中的重要元素。

如果我们想隔离 Sammy 的用户名,我们可以通过调用sammy['username']。让我们打印出来:

print(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()方法并查看输出:

print(sammy.keys())
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 onlinestatus,当我们运行这个小程序时我们可以找到它:

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:

print(sammy.items())
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字典并逐行打印出键和值,并提供信息以使其更容易被人类理解。

我们可以使用内置方法来访问字典数据结构中的项、值和键。

修改字典

字典是一种可变的数据结构,因此您可以修改它们。在本节中,我们将介绍添加和删除字典元素。

添加和更改字典元素

在不使用方法或函数的情况下,您可以使用以下语法将键值对添加到字典中:

dict[key] = value

我们将通过向名为的字典添加键值对来了解它在实践中的工作原理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.')

让我们在命令行上运行该程序:

  1. python 用户名.py

当我们运行该程序时,我们将得到类似以下的输出:

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().

删除字典元素

正如您可以添加键值对并更改字典数据类型中的值一样,您也可以删除字典中的项目。

要从字典中删除键值对,我们将使用以下语法:

del dict[key]

让我们以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完全摆脱它:

del jesse

print(jesse)

当我们调用print()删除后jesse字典,我们会收到以下错误:

Output
... NameError: name 'jesse' is not defined

由于字典是可变数据类型,因此可以添加、修改以及删除和清除它们。

结论

本教程介绍了 Python 中的字典数据结构。字典由键值对组成,提供了一种不依赖索引来存储数据的方法。这使我们能够根据值的含义以及与其他数据类型的关系来检索值。

从这里,您可以在我们的“了解数据类型“ 教程。

您可以看到编程项目中使用的字典数据类型,例如使用 Scrapy 进行网页抓取.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解 Python 3 中的字典 的相关文章

随机推荐

  • 你应该知道的 Nginx 命令

    Nginx 发音为 engine x 是一个免费 开源 高性能的 HTTP 和反向代理服务器 负责处理互联网上一些最大网站的负载 它可以用作独立的 Web 服务器 也可以用作反向代理适用于 Apache 和其他 Web 服务器 如果您是开发
  • 如何在 Linux 中挂载和卸载文件系统

    在 Linux 和 UNIX 操作系统上 您可以使用mount用于在目录树中的特定安装点附加 安装 文件系统和可移动设备 例如 USB 闪存驱动器 的命令 The umount命令从目录树中分离 卸载 已安装的文件系统 在本教程中 我们将介
  • 如何在 JavaScript 中使用 Switch 语句

    介绍 条件语句是所有编程语言中最有用和最常见的功能之一 如何在 JavaScript 中编写条件语句描述了如何使用if else and else if关键字根据不同的条件控制程序的流程 在 JavaScript 中通常是用户输入的结果 此
  • 如何生成带校验和的资源标识符

    作者选择了免费开源基金接受捐赠作为为捐款而写程序 介绍 唯一标识符 UID 或身份标识 可以是字符串值或整数 API 开发人员经常使用它们来寻址 API 中的唯一资源 然后 API 使用者使用这些标识符从资源集合中获取单个资源 如果没有唯一
  • 如何在 Debian 11 上安装和使用 Composer

    介绍 Composer是一个流行的 PHP 依赖管理工具 创建主要是为了方便项目依赖的安装和更新 Composer 的工作原理是检查特定项目所依赖的其他软件包 然后根据项目需求使用适当的版本为您安装它们 Composer 还常用于引导基于流
  • 如何编写您的第一个 Ruby 程序

    介绍 你好 世界 程序是计算机编程中经典且历史悠久的传统 对于初学者来说 这是一个小而完整的第一个程序 并且是确保正确配置环境的好方法 本教程将引导您完成用 Ruby 创建该程序 但是 为了使程序更有趣 您将修改传统的 Hello Worl
  • Java 中的矩阵程序

    矩阵是一个矩形数组 元素按行和列排列 在本教程中 我们将了解一些 Java 矩阵程序 矩阵的图形表示 Matrix Java 中的矩阵 我们可以使用矩阵来实现Java中的二维数组 可以使用索引 array r c 访问行 r 和列 c 的元
  • 什么是平衡二叉树以及如何检查它?

    对于二叉树 如果树是倾斜的 那么执行操作时计算效率就会降低 这就是确保树木不倾斜的动机 因此需要平衡二叉树 什么是平衡二叉树 平衡二叉树在计算上执行操作是高效的 平衡二叉树将遵循以下条件 任意节点左右子树高度差的绝对值小于1 对于每个节点
  • Java 15 特性

    保持六个月周期的传统 发布后Java 142020 年 3 月 17 日 我们现在有了 Java 15 下一个非 LTS 版本将于 2020 年 9 月 15 日推出 Java 15 特性 下面快速浏览一下 Java 15 的功能 密封课程
  • 如何在 Debian 11 上设置 NFS 挂载

    介绍 NFS 网络文件系统 是一种分布式文件系统协议 允许您在服务器上挂载远程目录 这允许您管理不同位置的存储空间并从多个客户端写入该空间 NFS 提供了一种相对标准且高性能的方式来通过网络访问远程系统 并且在必须定期访问共享资源的情况下运
  • Log4j 级别示例 - 顺序、优先级、自定义过滤器

    如果您使用过 log4j 您会注意到有很多方法来记录消息 例如 logger trace My Log message logger debug My Log message logger info My Log message 实际上它们
  • 如何在 Ubuntu 12.04 LTS 上设置 Apache 虚拟主机

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • json-简单示例

    json simple 是一个简单的 JSON java 工具包 json simple 库完全符合 JSON 规范 RFC4627 json 简单 json simple uses Map and List internally for
  • 如何在R中使用sample()获取样本?

    让我们了解 R 中最常用的函数之一 sample 在数据分析中 对数据进行采样是分析师最常见的过程 要研究和理解数据 有时采样是最好的方法 对于大数据来说尤其如此 R 提供标准函数sample 来从数据集中获取样本 许多业务和数据分析问题都
  • 如何在 Ubuntu 16.04 上使用 Webmin、LAMP、BIND 和 PostFix 安装 Virtualmin

    介绍 Webmin是一个 Web 前端 允许您通过浏览器远程管理服务器 虚拟分钟是Webmin的一个插件 可以通过单个界面简化多个虚拟主机的管理 类似于cPanel or Plesk 使用 Virtualmin 您可以管理用户帐户 Apac
  • Python等待时间,等待用户输入

    有时我们希望 python 程序在执行下一步之前等待特定的时间 我们可以用时间模块 sleep 函数将我们的程序暂停指定的秒数 Python等待时间 让我们看一个简单的示例 在执行进一步的语句之前 我们将暂停程序 5 秒钟 import t
  • Java 队列 – Java 中的队列

    Java Queue is an interface available in java util package and extends java util Collection interface Just like Java List
  • Python 小数 - 除法、舍入、精度

    Python 小数模块帮助我们以适当的精度进行除法和四舍五入numbers Python 十进制模块 In this lesson on decimal module in Python we will see how we can man
  • Java 字符串中最长的回文子串

    字符串中最长的回文子串是很常见的java面试题 找出最长的回文数String 首先 我们需要确定这样做的逻辑 字符串算法中的最长回文子串 这里的关键点是 从任何回文串的中间开始 如果我们向右和向左移动 1 个位置 它总是相同的字符 例如12
  • 理解 Python 3 中的字典

    介绍 The 字典是Python内置的mapping类型 词典地图keys to values这些键值对提供了一种在 Python 中存储数据的有用方法 字典通常用于保存相关数据 例如 ID 或用户配置文件中包含的信息 字典的两侧都带有花括