使用python字典管理数据

ops/2024/12/12 22:06:59/

Python字典简洁

Python 中的变量可以存储各种数据类型。 之前,你已了解可以存储字符串和数字:

Python

python">name = 'Earth'
moons = 1

 尽管此方法确实适用于少量数据,但处理相关数据时,可能会变得越来越复杂。 想象一下,你想存储有关地球卫星和木星卫星的信息。

python">earth_name = 'Earth'
earth_moons = 1jupiter_name = 'Jupiter'
jupiter_moons = 79

请注意,我们复制了具有不同前缀的变量。 这种重复会变得难以处理。 由于你会经常使用相关的数据集,例如不同城市不同月份的平均降雨量,因此将这些变量存储为单独的值并不是一个可行的选项。 可以改用 Python 字典。

Python 字典使你能够使用相关的数据集。 字典是键/值对的集合。 可以将其想象为容器内的一组变量,其中键是变量的名称,值是存储在其中的值。

创建字典

Python 使用大括号 ({ }) 和冒号 (:) 来表示字典。 可以创建一个空字典,之后再添加值,也可以在创建时进行填充。 每个键/值用冒号分隔,每个键的名称以字符串字面量形式包含在引号中。 由于键是字符串字面量,因此可以使用任何适当的名称来描述值。

让我们创建一个字典来存储地球的名称,以及地球具有的卫星数量:

python">planet = {'name': 'Earth','moons': 1
}

你有两个键,'name' 和 'moons'。 每个键的行为方式都与变量的行为方式非常相似:它们具有唯一的名称,并且存储一个值。 但是,它们包含在一个名为 planet 的更大变量中。

与常规变量一样,你需要确保使用正确的数据类型。 在前面示例中的 moons 的值 1 中,由于你想要使用整数,因此未在数字两边加上引号。 如果使用了 '1',Python 会将此变量视为字符串,这会影响执行计算的能力。

与常规变量不同,键名不需要遵循 Python 的标准命名规则。 可以使用键名来使代码更具描述性。

读取字典值
可以读取字典中的值。 字典对象具有 get 方法,可以使用该方法通过键访问值。 如果要打印 name,可以使用以下代码:

print(plant.get('name'))

Output

Earth 

 正如你所料,访问字典中的值是一项常见操作。 幸运的是,有一个快捷方式。 可以将键传递到方括号表示法 ([ ])。 此方法使用的代码比 get 少,并且大多数程序员都使用这种语法。 可以使用以下代码重写前面的示例:

python"># planet['name'] is identical to using planet.get('name')
print(planet['name'])

Output

Earth 

 尽管 get 和方括号 ([ ]) 在检索项时通常行为相同,但存在一个关键区别。 如果键不可用,get 将返回 None,[ ] 将引发 KeyError。

修改字典值

还可以使用 update 方法修改字典对象内的值。 此方法接受字典作为参数,并使用你提供的新值更新任何现有值。 如果要更改 planet 字典的 name,可以使用以下代码,例如:

python">planet.update({'name': 'Makemake'})# No output: name is now set to Makemake.

 与使用方括号 ([ ]) 快捷方式读取值类似,你可以使用该相同的快捷方式来修改值。 语法的主要区别在于将使用 =(有时称为赋值运算符)来提供新值。 若要重写前面的示例以更改名称,可以使用以下代码:

python">planet['name'] = 'Makemake'# No output: name is now set to Makemake.

使用 update 的主要优势是能够在一次操作中修改多个值。 接下来的两个示例在逻辑上相同,但语法不同。 你可以随意使用你认为最合适的任何语法。 大多数开发人员选择使用方括号来更新单个值。

以下示例对 planet 变量进行相同的编辑,更新名称和卫星。 请注意,通过使用 update,你对函数进行了一次调用,而使用方括号涉及两次调用。

使用更新:

python">planet.update({'name': 'Jupiter','moons': 79
})

使用方括号:

python">planet['name'] = 'Jupiter'
planet['moons'] = 79

添加和删除键
初始化字典时,无需创建所有键。 事实上,无需创建任何键! 每当需要创建新键时,都可以像分配现有键一样分配它。

假设你要更新 planet 以包含以天为单位的轨道周期:

python">planet['orbital period'] = 4333# planet dictionary now contains: {
#   name: 'jupiter'
#   moons: 79
#   orbital period: 4333
# }

 与 Python 中的其他所有内容一样,键名区分大小写。 因此,'name' 和 'Name' 在 Python 字典中被视为两个单独的键。

若要删除键,请使用 pop。 pop 返回值并从字典中删除键。 若要删除 orbital period,可以使用以下代码:

python">planet.pop('orbital period')# planet dictionary now contains: {
#   name: 'jupiter'
#   moons: 79
# }

复杂数据类型
字典能够存储任何类型的值,包括其他字典。 这样,你可以根据需要对复杂数据进行建模。 想象一下,你需要存储 planet 的直径,该直径可以在其赤道或两极附近测量。 你可以在 planet 内创建另一个字典来存储此信息:

python"># Add address
planet['diameter (km)'] = {'polar': 133709,'equatorial': 142984
}# planet dictionary now contains: {
#   name: 'Jupiter'
#   moons: 79
#   diameter (km): {
#      polar: 133709
#      equatorial: 142984
#   }
# }

若要检索嵌套字典中的值,请将方括号链接在一起,或调用 get。

python">print(f'{planet["name"]} polar diameter: {planet["diameter (km)"]["polar"]}')

 Jupiter polar diameter: 133709

 

 

 

 

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/ops/141355.html

相关文章

Flink的架构体系

Flink中的重要角⾊ JobManager处理器 JobManager处理器也称之为Master,用于协调分布式执行,它们用来调度task,协调检查点,协调失败时恢复等。Flink运行时至少存在一个master处理器,如果配置高可用模式则会存在多个mas…

代码随想录打卡Day46

647.回文子串 题目描述: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1: 输入:s "abc&quo…

【学习笔记】目前市面中手持激光雷达设备及参数汇总

手持激光雷达设备介绍 手持激光雷达设备是一种利用激光时间飞行原理来测量物体距离并构建三维模型的便携式高科技产品。它通过发射激光束并分析反射回来的激光信号,能够精确地获取物体的三维结构信息。这种设备以其高精度、适应各种光照环境的能力和便携性&#xf…

聚类及Python下实现 K-means 算法

聚类 聚类是无监督学习中的一种重要方法,旨在将数据集中相似的数据对象划分到同一个簇中,使得不同簇之间的数据对象差异尽可能大。在大数据环境下,聚类可以帮助挖掘数据中的隐藏结构和模式,应用场景十分广泛,比如在客…

PyCharm文件、临时文件、目录、文件夹(Directory)、软件包(Package)的区别

首先是目录(Directory)文件夹是一样的,只是叫法不一样 软件包它是一个包含多个模块(.py文件)的目录,并且这个目录中必须包含一个特殊的文件__init__.py 从功能角度看,软件包提供了一种命名空间的机制。这意…

CPP项目推荐:协程库项目

星球里的协程库项目正式做了第二版更新: 更新后的协程库项目代码开源的Github上:https://github.com/youngyangyang04/coroutine-lib 大家可以自己学习,也欢迎star、fork 目前知识星球里已经更新 6个CPP项目、2个Java项目、两个前端、一个G…

Spring Boot性能提升:实战案例分析

引言 随着微服务架构的流行,Spring Boot因其轻量级和快速开发周期而受到开发者的青睐。然而,随着应用规模的增大和复杂度的提升,如何优化Spring Boot应用的性能成为了开发者关注的焦点。本文将从实战案例出发,探讨Spring Boot性能…

Spring Boot日志:从Logger到@Slf4j的探秘

写在前面 Hello大家好,今日是2024年的第一天,祝大家元旦快乐?? 2024第一篇文章从SpringBoot日志开始 文章目录 一、前言二、日志有什么用?三、日志怎么用?四、自定义日志打印 ?? 常见日志框架说明4.1 在程序中得到?志对象【…