一文搞懂 Python 3 中的字典

本文详细介绍了Python中的字典数据结构,包括其定义、键值对应、访问方式(通过键、keys(),values(),items()方法)、以及添加、修改和删除元素的方法。强调了字典作为无序到有序的演变以及在编程中的应用场景。
摘要由CSDN通过智能技术生成

简介

字典是 Python 内置的映射类型。字典将映射到,这些键-值对为在 Python 中存储数据提供了一种有用的方式。

通常用于保存相关的数据,比如 ID 或用户资料中包含的信息,字典是由花括号 { } 构建的。

一个字典看起来像这样:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

除了花括号,字典中还有冒号(:)。冒号左边的词是键。可以由任何不可变数据类型组成。上面字典中的键是:

  • 'username'
  • 'online'
  • 'followers'

上面示例中的每个键都是字符串值。

冒号右边的词是值。可以由任何数据类型组成。上面字典中的值是:

  • 'sammy-shark'
  • True
  • 987

这些值分别是字符串、布尔值或整数。

让我们打印字典 sammy

print(sammy)
{'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'])
sammy-shark

字典的行为类似于数据库,不同之处在于,我们不是通过调用整数来获取特定索引值,而是为键分配一个值,并且可以调用该键来获取其相关的值。

通过调用键 'username',我们得到了该键的值,即 'sammy-shark'

sammy 字典中的其余值也可以使用相同的格式进行调用:

sammy['followers']
# 返回 987

sammy['online']
# 返回 True

通过使用字典的键-值对,我们可以引用键来检索值。

使用方法访问元素

除了使用键来访问值之外,我们还可以使用一些内置方法:

  • dict.keys() 用于隔离键
  • dict.values() 用于隔离值
  • dict.items() 返回一个由 (key, value) 元组对组成的列表格式的项目

要返回键,我们将使用 dict.keys() 方法。在我们的示例中,这将使用变量名,并且是 sammy.keys()。让我们将其传递给 print() 方法并查看输出:

print(sammy.keys())
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 分别是用户资料字典。

它们的资料有不同的键,因为 Sammy 有一个带有关联关注者的社交资料,而 Jesse 有一个带有关联积分的游戏资料。它们共有的 2 个键是 usernameonline 状态,我们可以在运行这个小程序时找到它们:

sammy-shark JOctopus
True False

我们当然可以改进程序,使输出更易于阅读,但这说明了 dict.keys() 可以用于跨多个字典检查它们共有或不共有的内容。这对于大型字典特别有用。

类似地,我们可以使用 dict.values() 方法查询 sammy 字典中的值,构造为 sammy.values()。让我们打印出来:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

print(sammy.values())
dict_values([True, 'sammy-shark', 987])

keys()values() 方法都返回 sammy 字典中的键和值的未排序列表,分别使用 dict_keysdict_values 的视图对象。

如果我们对字典中的所有项目感兴趣,我们可以使用 items() 方法来访问它们:

print(sammy.items())
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)
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

上面的 for 循环遍历了 sammy 字典中的项目,并逐行打印了键和值,同时添加了一些信息,以便人类更容易理解。

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

修改字典

字典是一种可变数据结构,因此您可以对其进行修改。在本节中,我们将讨论如何添加和删除字典元素。

添加和更改字典元素

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

dict[key] = value

我们将通过向名为 usernames 的字典添加键-值对来看看这是如何实现的:

usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

usernames['Drew'] = 'squidly'

print(usernames)
{'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)
{'username': 'squidly', 'followers': 342, 'online': True}

从输出中,我们看到关注者数量从整数值 305 跳到 342

我们可以使用此方法通过用户输入向字典中添加键-值对。让我们编写一个快速程序 usernames.py,它在命令行上运行,并允许用户输入以添加更多的名称和相关的用户名:

# 定义原始字典
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

# 设置 while 循环进行迭代
while True:

    # 请求用户输入一个名称
    print('Enter a name:')

    # 分配给名称变量
    name = input()

    # 检查名称是否在字典中,并打印反馈
    if name in usernames:
        print(usernames[name] + ' is the username of ' + name)

    # 如果名称不在字典中...
    else:

        # 提供反馈        
        print('I don\'t have ' + name + '\'s username, what is it?')

        # 为关联名称输入新的用户名
        username = input()

        # 将用户名值分配给名称键
        usernames[name] = username

        # 打印数据已更新的反馈
        print('Data updated.')

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

python usernames.py

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

在这里插入图片描述

当我们完成测试程序时,我们可以按 CTRL + C 退出程序。您可以设置一个触发器来退出程序(例如输入字母 q)并使用条件语句来改进代码。

这展示了您可以交互地修改字典。对于这个特定的程序,一旦您使用 CTRL + C 退出程序,除非实现一种处理读取和写入文件的方式,否则您将丢失所有数据。

我们还可以使用 dict.update() 方法向字典中添加和修改键-值对。这与列表中可用的 append() 方法不同。

在下面的 jesse 字典中,让我们使用 jesse.update() 向其添加键 'followers' 并给它一个整数值。然后,让我们 print() 更新后的字典。

jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

jesse.update({'followers': 481})

print(jesse)
{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}

从输出中,我们可以看到我们成功地向字典 jesse 添加了 'followers': 481 键-值对。

我们还可以使用 dict.update() 方法通过替换特定键的给定值来修改现有的键-值对。

让我们将 Sammy 的在线状态从 True 更改为 False

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

sammy.update({'online': False})

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

sammy.update({'online': False}) 行引用了现有的键 'online' 并将其布尔值从 True 更改为 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)
{'online': False, 'username': 'JOctopus', 'followers': 481}

del jesse['points'] 行从 jesse 字典中删除了键-值对 'points': 723

如果我们想要清空字典中的所有值,我们可以使用 dict.clear() 方法。这将保留给定的字典,以便我们稍后在程序中使用它,但它将不再包含任何项目。

让我们清空 jesse 字典中的所有项目:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

jesse.clear()

print(jesse)
{}

输出显示我们现在有一个空字典,不包含任何键-值对。

如果我们不再需要特定的字典,我们可以使用 del 完全将其删除:

del jesse

print(jesse)

当我们在删除 jesse 字典后运行 print() 时,我们将收到以下错误:

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

因为字典是可变数据类型,所以可以添加、修改和删除项目。

结论

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

你可以在编程项目中看到字典数据类型的应用,比如使用 Scrapy 进行网页抓取。

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python的eval()函数是一个内置函数,它可以将一个字符串作为代码来执行。它的基本用法是将一个字符串当作Python表达式来执行,并返回表达式的结果。下面是对Python eval()函数的一些总结: 1. eval()函数的基本语法如下: ``` eval(expression[, globals[, locals]]) ``` 其,expression为需要执行的Python表达式,globals和locals为可选参数,分别表示全局和局部命名空间字典。 2. eval()函数可以执行任何Python表达式,包括函数调用、赋值语句等。例如: ``` x = 1 y = 2 print(eval("x + y")) ``` 输出结果为:3 3. eval()函数还可以执行包含控制语句的表达式,例如if语句、for循环语句等。但是要注意,eval()函数执行的代码必须是安全可靠的,否则可能会有安全风险。例如: ``` x = 1 y = 2 z = eval("if x > y: x else: y") print(z) ``` 输出结果为:2 4. eval()函数还可以执行包含异常处理语句的表达式。例如: ``` try: eval("1/0") except ZeroDivisionError as e: print("Error:", e) ``` 输出结果为:Error: division by zero 5. eval()函数还可以接受一个字典作为globals参数,用于指定全局命名空间。例如: ``` x = 1 y = 2 print(eval("x + y", {"x": 2, "y": 3})) ``` 输出结果为:5 6. eval()函数还可以接受一个字典作为locals参数,用于指定局部命名空间。例如: ``` x = 1 y = 2 print(eval("x + y", {}, {"x": 2, "y": 3})) ``` 输出结果为:5 7. eval()函数的返回值为表达式的结果。例如: ``` x = 1 y = 2 z = eval("x + y") print(z) ``` 输出结果为:3 总之,eval()函数是Python非常有用的一个内置函数,它可以让我们在运行时执行动态的Python代码。但是要注意,使用eval()函数时需要谨慎,避免因为执行不安全的代码而导致安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张无忌打怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值