【Python基础】Python数据容器(字典)

简介: 【Python基础】Python数据容器(字典)

数据容器:dict(字典、映射)

  • 为什么需要字典?

字典提供了 通过A,找到与A相关联的内容的功能

Q:为什么使用字典?

因为使用字典,可以实现通过Key,找到对应的Value的操作

字典的定义

字典:同样使用{},不过存储的元素是一个个的:键值对

语法:

# 定义字典字面量
{key: value, key: value, ....., key: value}
# 定义字典变量
my_dict = {key: value, key: value, ....., key: value}
# 定义空字典
my_dict = {}        # 方式1
my_dict = dict()    # 方式2
# 定义字典
my_dict1 = {"aa": 90, "bb": 83, "cc": 77}
# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(f"字典1的内容是:{my_dict1},类型{type(my_dict1)}")
print(f"字典2的内容是:{my_dict2},类型{type(my_dict2)}")
print(f"字典3的内容是:{my_dict3},类型{type(my_dict3)}")
# python字典中的Key是不可以重复的
运行效果:
字典1的内容是:{'aa': 90, 'bb': 83, 'cc': 77},类型<class 'dict'>
字典2的内容是:{},类型<class 'dict'>
字典3的内容是:{},类型<class 'dict'>
# 定义重复key的字典
my_dict1 = {"aa": 90, "aa": 83, "cc": 77}
print(f"字典1的内容是:{my_dict1},类型{type(my_dict1)}")
运行效果:
字典1的内容是:{'aa': 83, 'cc': 77},类型<class 'dict'>  
# 新的会把老的给覆盖掉

字典数据的获取

字典同集合一样,不可以使用下标索引

但是字典可以通过Key值来取得对应的Value

# 从字典中基于Key获取Value
my_dict1 = {"aa": 90, "bb": 83, "cc": 77}
score = my_dict1["aa"]
print(f"aa的考试分数是:{score}")
score = my_dict1["bb"]
print(f"bb的考试分数是:{score}")
运行效果:
aa的考试分数是:90
bb的考试分数是:83

字典的嵌套

字典的Key和Value可以是任意数据类型(Key不可为字典)

这表明,字典是可以嵌套的

需求如下:记录学生各科的考试信息

# 定义嵌套字典
stu_score_dict = {
    "aa": {
        "语文": 77,
        "数学": 87,
        "英语": 90
    }, "bb": {
        "语文": 80,
        "数学": 99,
        "英语": 50
    }, "cc": {
        "语文": 97,
        "数学": 77,
        "英语": 80
    }
}
print(f"学生的考试信息是:{stu_score_dict}")
# 从嵌套字典中获取数据
# 看一下aa的语文信息
score = stu_score_dict["aa"]["语文"]
print(f"aa的语文分数是:{score}")
score = stu_score_dict["bb"]["英语"]
print(f"bb的英语分数是:{score}")

字典的注意事项

  • 键值对的Key和Value可以是任意类型(Key不可为字典)
  • 字典内Key不允许重复,重复添加等同于覆盖原有数据
  • 字典不可用下标索引,而是通过Key检索Value

字典的常用操作

(1)新增元素

语法:字典[Key] = Value

结果:字典被修改,新增了元素

新增元素、更新元素 语法一致

如果新增的key不存在,等同于新增元素

如果新增的key存在,等同于更新元素 【因为key不可重复,所以会覆盖原来的value值】

(2)更新元素

语法:字典[Key] = Value

结果:字典被修改,元素被更新

Tip:字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value值

my_dict = {"aa": 89, "bb": 90, "cc": 77}
# 新增元素
my_dict["dd"] = 99
print(f"字典新增元素之后是:{my_dict}")
# 更新元素
my_dict["bb"] = 66
print(f"字典更新后:{my_dict}")
运行效果:
字典新增元素之后是:{'aa': 89, 'bb': 90, 'cc': 77, 'dd': 99}
字典更新后:{'aa': 89, 'bb': 66, 'cc': 77, 'dd': 99}

(3)删除元素

语法:字典.pop(Key)

结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除

# 删除元素
score = my_dict.pop("bb")
print(f"字典中移除了一个元素,结果:{my_dict},bb的分数:{score}")
运行效果:
字典中移除了一个元素,结果:{'aa': 89, 'cc': 77, 'dd': 99},bb的分数:66

(4)清空字典

语法:字典.clear()

结果:字典被修改,元素被清空

# 清空元素
my_dict.clear()
print(f"字典给被清空,内容是:{my_dict}")
运行效果:
字典给被清空,内容是:{}

(5)获取全部key

语法:字典.keys()

结果:得到字典中的全部Key

# 获取全部key
my_dict = {"aa": 89, "bb": 90, "cc": 77}
keys = my_dict.keys()
print(f"字典的全部key:{keys}")
运行效果:
字典的全部key:dict_keys(['aa', 'bb', 'cc'])
  • 取出key的用处
# 遍历字典
# 方式1:通过获取到全部的key来完成遍历
for key in keys:
    print(f"字典的key:{key}")
    print(f"字典的value:{my_dict[key]}")
# 方式2:直接对字典进行for循环,每一次循环都是直接得到key
for key in my_dict:
    print(f"字典的key:{key}")
    print(f"字典的value:{my_dict[key]}")
# 因为字典不支持下标索引,所以字典不可以用while循环

因为字典不支持下标索引,所以字典不可以用while循环

(6)统计字典中的元素数量

语法:len(字典)

# 总计字典中的元素数量,len()函数
my_dict = {"aa": 89, "bb": 90, "cc": 77}
num = len(my_dict)
print(f"字典中的元素数量有:{num}个")
运行效果:
字典中的元素数量有:3个

字典的特点

  • 可以容纳多个数据
  • 可以容纳不同类型的数据
  • 每一份数据是KeyValue键值对
  • 可以通过Key获取Value,Key不可重复(重复会覆盖)
  • 不支持下标索引
  • 可以修改(增加或删除更新元素等)
  • 支持for循环,不支持while循环
  • 案例练习:升职加薪
"""
演示字典的课后练习:升职加薪,对所有级别为1级的员工,级别上升1级,薪水增加1000元
"""
# 组织字典记录数据
info_dict = {
    "aa": {
        "部门": "科技部",
        "工资": 3000,
        "级别": 1
    },
    "bb": {
        "部门": "市场部",
        "工资": 5000,
        "级别": 1
    },
    "cc": {
        "部门": "科技部",
        "工资": 6000,
        "级别": 2
    },
    "dd": {
        "部门": "市场部",
        "工资": 8000,
        "级别": 3
    },
    "ee": {
        "部门": "科技部",
        "工资": 9000,
        "级别": 3
    }
}
# 升职加薪之前的薪资
print(f"升职加薪之前的情况:{info_dict}")
# for循环
for name in info_dict:
    # if条件判断复合条件员工
    if info_dict[name]["级别"] == 1:
        # 升职加薪操作
        # 获取到员工的信息字典
        employee_info_dict = info_dict[name]
        # 修改员工的信息
        employee_info_dict["级别"] = 2  # 级别+1
        employee_info_dict["工资"] += 1000  # 工资+1000
        # 将员工的信息更新回info_dict
        info_dict[name] = employee_info_dict
# 输出结果
print(f"对员工进行升职加薪后的结果是:{info_dict}")


目录
相关文章
|
7天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
16 1
|
8天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
9天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
21天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
48 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
7天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
15 0
|
3天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
13 2
|
13天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
9天前
|
关系型数据库 MySQL API
|
10天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
190 7
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
2天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。