【Python】S1 基础篇 P5 字典模块指南

目录

  • 字典的本质与底层实现
    • 基础语法结构
  • 使用字典
    • 访问字典中的值
    • 添加键值对
    • 修改字典中的值
    • 删除键值对
    • 使用 get() 来访问值
  • 遍历字典
    • 遍历所有键值对
    • 遍历字典中的所有键
    • 遍历字典中的所有值
  • 嵌套
    • 字典列表
    • 在字典中存储列表

在这里插入图片描述

字典(Dictionary)是Python中灵活且强大的内置数据结构之一。作为一个映射类型(mapping type),它以键值对的形式存储数据,为复杂的真实物体场景提供了理想的建模解决方案。总结来说,字典不仅提供了高效的数据存储方式,更是构建复杂应用架构的基础。

字典的本质与底层实现

在 Python 中,字典是基于哈希表(Hash Table)实现的数据结构,提供 O(1)O(1)O(1) 时间复杂度的查找、插入和删除操作。字典使用键(key)来索引值(value),其中键必须是不可变类型,而值可以是任意 Python 对象。

基础语法结构

字典用放在花括号 {} 中的一系列键值对表示,每个键值对通过冒号 : 连接,多个键值对之间用逗号 , 分隔。

# 基本字典结构
person = {'name': '张三','age': 28,'city': '北京','active': True
}

字典的键必须是不可变类型(如字符串、数字、元组),而值可以是任意 Python 对象。这种设计确保了键的唯一性和哈希计算的稳定性。


使用字典

Python 字典是一种关联数组,实现了键到值的映射关系。作为可变数据类型,字典支持动态添加、修改和删除操作。字典中的键值对是无序的,通过键来快速访问对应的值,这种访问方式比列表的索引访问更加语义化和灵活。

键值对体现了现实世界中实体与属性的关联关系。当指定一个键时,Python 的哈希算法会快速定位并返回与之关联的值。这种映射机制使得字典成为数据建模和配置管理的理想选择。

# 复合数据类型的字典
employee = {'id': 'E001','name': '李明','skills': ['Python', 'Django'],'contact': {'email': 'li@company.com', 'phone': '138xxxx'}
}

访问字典中的值

字典提供了直接通过键访问值的机制。使用方括号语法 dict[key] 是最直接的访问方式,但需要确保键的存在性,否则会抛出 KeyError 异常。

print(employee['name'])  # 输出: 李明
print(employee['contact']['email'])  # 访问嵌套字典

添加键值对

字典的动态特性允许在运行时添加新的键值对。新添加的键值对会根据哈希值存储在适当的位置,不影响现有数据的访问性能。

employee['department'] = '技术部'
employee['hire_date'] = '2023-01-15'

修改字典中的值

字典是可变对象,支持原地修改操作。修改操作不会改变字典的内存地址,只是更新了特定键对应的值。

employee['name'] = '李明华'  # 修改现有值
employee['skills'].append('FastAPI')  # 修改列表类型的值

删除键值对

Python 提供了多种删除字典键值对的方法,每种方法适用于不同的使用场景:

# del 语句 - 直接删除
del employee['hire_date']# pop() 方法 - 删除并返回值
old_name = employee.pop('name')# popitem() 方法 - 删除并返回最后插入的键值对(Python 3.7+)
last_item = employee.popitem()

使用 get() 来访问值

直接使用方括号语法访问字典值时,如果键不存在会引发 KeyError 异常。get() 方法提供了安全的访问机制,是异常处理的优雅替代方案。

get() 方法接受两个参数:第一个参数是要查找的键(必需),第二个参数是键不存在时的默认返回值(可选,默认为 None)。这种设计模式在处理不确定数据源时特别有用。

# 安全访问,避免 KeyError
department = employee.get('department', '未分配')
bonus = employee.get('bonus', 0)# 处理嵌套字典的安全访问
email = employee.get('contact', {}).get('email', '未提供')

遍历字典

字典遍历是数据处理中的基本操作。Python 提供了多种遍历方式,每种方式返回不同的视图对象(view objects),这些视图对象反映字典的实时状态,具有内存高效的特点。

遍历所有键值对

items() 方法返回字典的键值对视图,是最常用的遍历方式。它允许同时访问键和值,适用于需要完整信息的处理场景。

user_scores = {'Alice': 95, 'Bob': 87, 'Charlie': 92}for name, score in user_scores.items():grade = 'A' if score >= 90 else 'B' if score >= 80 else 'C'print(f"{name}: {score} ({grade})")

遍历字典中的所有键

当只需要处理字典的键时,keys() 方法是最佳选择。它返回键的视图对象,常用于条件检查、键的变换或过滤操作。

config = {'debug': True, 'port': 8000, 'host': 'localhost'}# 检查配置项
required_keys = ['host', 'port']
for key in config.keys():if key in required_keys:print(f"必需配置 {key}: {config[key]}")

按特定顺序遍历字典中的所有键

虽然现代 Python 保持插入顺序,但有时需要按特定逻辑排序。sorted() 函数结合 keys() 方法可以实现各种排序需求。

sales = {'Q1': 45000, 'Q3': 52000, 'Q2': 38000, 'Q4': 61000}# 按键名排序
for quarter in sorted(sales.keys()):print(f"{quarter}: {sales[quarter]}")# 按值排序键
for quarter in sorted(sales.keys(), key=lambda x: sales[x], reverse=True):print(f"{quarter}: {sales[quarter]}")

遍历字典中的所有值

values() 方法返回值的视图对象,适用于值的统计分析、聚合计算等操作。由于不包含键信息,主要用于数值计算和数据分析场景。

需要注意的是,直接提取值可能包含重复项。在需要唯一值的场景下,应结合集合(set)进行去重处理,这是数据处理中的常见模式。

departments = {'Alice': '技术部','Bob': '销售部', 'Charlie': '技术部','David': '市场部'
}# 统计部门分布
all_depts = list(departments.values())
unique_depts = set(departments.values())print(f"总人数: {len(all_depts)}")
print(f"部门数: {len(unique_depts)}")
print(f"各部门: {', '.join(unique_depts)}")

嵌套

在复杂的应用场景中,单层字典往往无法满足数据建模需求。嵌套结构通过将字典作为值存储在其他字典中,或将字典存储在列表中,构建了多维数据模型。这种层次化的数据组织方式更贴近现实世界的复杂关系,是企业级应用中数据架构设计的基础。

嵌套不仅提供了数据的逻辑分组,还支持更精细的数据访问控制和处理策略。正如现实世界中,复杂问题往往涉及多个相互关联的维度,嵌套字典为这种多维关系提供了自然的表达方式。

字典列表

字典列表是将多个结构相似的字典组织成列表的数据模式,适用于表示同类实体的集合,如用户列表、产品目录、订单记录等。这种结构结合了列表的有序性和字典的语义化访问特点。

employees = [{'id': 'E001', 'name': '张三', 'dept': '技术部', 'salary': 8000},{'id': 'E002', 'name': '李四', 'dept': '销售部', 'salary': 7000},{'id': 'E003', 'name': '王五', 'dept': '技术部', 'salary': 9000}
]# 部门薪资统计
tech_employees = [emp for emp in employees if emp['dept'] == '技术部']
avg_tech_salary = sum(emp['salary'] for emp in tech_employees) / len(tech_employees)
print(f"技术部平均薪资: {avg_tech_salary}")

字典列表支持复杂的查询和聚合操作,是数据分析和报表生成的重要数据结构。通过列表推导式和内置函数的组合,可以实现高效的数据处理管道。

在字典中存储列表

当需要将一个键关联到多个值时,在字典中嵌套列表是最直接的解决方案。这种模式广泛应用于分组、分类和一对多关系的建模中。

project_teams = {'电商平台': {'manager': '张经理','developers': ['李开发', '王前端', '赵后端'],'technologies': ['Python', 'React', 'PostgreSQL'],'milestones': ['需求分析', '系统设计', '开发实现', '测试上线']},'APP开发': {'manager': '刘经理', 'developers': ['孙移动', '周UI'],'technologies': ['React Native', 'Node.js'],'milestones': ['原型设计', '开发实现', '测试发布']}
}# 技术栈统计
all_technologies = set()
for project in project_teams.values():all_technologies.update(project['technologies'])print(f"公司技术栈: {sorted(all_technologies)}")# 人员分配分析  
total_developers = sum(len(project['developers']) for project in project_teams.values())
print(f"总开发人员: {total_developers}人")

这种嵌套模式支持复杂的数据查询和分析操作。通过合理设计嵌套结构,可以在保持数据完整性的同时,实现高效的数据访问和处理。在实际应用中,这种模式常用于配置管理、权限控制、业务规则定义等场景。

字典的嵌套能力使其成为 JSON 数据处理、API 响应解析、配置文件管理等现代 Python 应用的核心工具。掌握嵌套字典的使用技巧,是构建可扩展、可维护应用程序的关键技能。


2025.09 西三旗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921793.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉之多模板匹配

简介 计算机视觉第一课opencv(四)保姆级教学 之前说过模糊匹配只是对于单个目标进行匹配,今天我们就来学习一下如何对多个目标进行匹配 一、多目标匹配 对于这个图片我们要匹配下面那个箭头,我们可以发现图中是有两个位置相同的…

封装日期选择器组件,带有上周,下周按钮

ui图组件代码如下&#xff1a; <template><div><el-date-pickerv-model"dateRange"type"daterange"align"right"size"mini":editable"false"unlink-panelsrange-separator"至"start-placeholder&q…

基于SpringBoot+MYSQL开发的AI智能大数据医疗诊断平台

角色&#xff1a; 管理员、医生、居民 技术&#xff1a; SpringBoot、MyBatis、MySQL、Shiro、Beetl、Swagger、jQuery、Bootstrap 核心功能&#xff1a; 这是一个基于SpringBoot的社区医疗管理平台&#xff0c;旨在为管理员提供用户、角色、部门、菜单、日志等系统管理功能&am…

【MFC 小白日记】对话框编辑器里“原型图像”到底要不要勾?3 分钟看懂!

摘要&#xff1a;本文解析了MFC中Picture Control的"原型图像(Prototype Image)"属性的真实作用。该属性仅在设计时提供可视化的占位图预览&#xff0c;方便UI布局&#xff0c;运行时不会影响程序表现。文章通过对比实验验证&#xff0c;勾选后会在对话框编辑器中显示…

微信开放平台第三方平台,可以管理多个微信小程序

大家好&#xff0c;我是小悟。 这个系统可以帮助服务商更好地管理多个商家小程序&#xff0c;无需管理多个商家小程序的账号密码或者appId和secret&#xff0c;大大提升效率。 不需要频繁登录小程序后台就能完成上传代码、认证、备案、提交代码审核、发布小程序等操作。 这里录…

Java全栈学习笔记32

-- drop table t_stu;-- unique 唯一约束的列允许为null-- 如果在之后的操作中。需要某列必须为key&#xff0c;才能做一些操作的情况下。也可以使用唯一约束代替主键约束-- create table t_stu(-- studId int,-- tel varchar(11) unique,-- sex varchar(1),-- addr va…

linux升级系统,重启出现Minimal BASH-like line editingis supported

文章目录一.问题背景二.解决步骤2.1确认系统分区2.2手动引导2.3 重建grub引导2.4 还原软件包 一.问题背景 闲来无事&#xff0c;把ubuntu25.04通过sudo do-release-upgrade命令升级到了ubuntu25.10.在升级的过程会出现以下问题 1.自动替换flatpak程序为snap2.请求是否清除旧依赖…

type(类型别名)和 interface的区别和最佳实践

核心结论在大多数情况下&#xff0c;它们可以互换使用&#xff0c;都能描述对象的结构。它们的区别更多在于设计和扩展能力上。主要区别总结表特性interface (接口)type (类型别名)扩展方式使用 extends 继承interface A extends B {}使用 & 交叉类型type A B & C合并…

vscode中使用git、githup的基操

一、git提交 配置账户密码 查看用户信息 git config --global user.name # 查看用户名 git config --global user.email # 查看邮箱账户配置 # 设置全局用户名和邮箱 git config --global user.name "你的用户名" git config --global user.email "你的邮箱&q…

jsBridge接入流程

import deviceInfo from ./deviceInfo import { setRefreshToken } from ./token// 设备判断 const u navigator.userAgent export const isAndroid u.indexOf(Android) > -1 || u.indexOf(Adr) > -1 export const isIOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/)…

【C++】19. 封装红⿊树实现set和map

文章目录一、源码及框架分析二、模拟实现map和set1、insert的实现2、iterator的实现3、map⽀持[ ]4、模拟实现的完整源代码1&#xff09;RBTree.h2&#xff09;Myset.h3&#xff09;Mymap.h4&#xff09;Test.cpp一、源码及框架分析 SGI-STL30版本源代码&#xff0c;map和set的…

面试不会问题

1. 什么是表锁&#xff1f;什么是行锁&#xff1f;什么情况下会使用表锁&#xff1f;InnoDB引擎通过“索引”实现行锁&#xff08;锁定满足条件的行&#xff09;&#xff0c;但如果操作无法通过索引定位行&#xff0c;会导致行锁失效&#xff0c;进而升级为表锁。常见的表现为&…

达梦数据库-用户,权限,角色

达梦数据库-用户,权限,角色 在达梦数据库(DM8)中,用户(User)、权限(Privilege)和角色(Role) 是数据库安全体系的核心组成部分,用于控制谁可以访问数据库、能访问哪些对象以及能执行哪些操作。 下面为你提供一份全面、详细、结构化的说明,帮助你深入理解达梦数据…

uniapp原生插件 TCP Socket 使用文档

uniapp原生插件 TCP Socket 使用文档 试了插件市场几个TCP Socket插件都不能实现监听服务器主动断开&#xff0c;于是闲来无事就开发了一款&#xff0c;本插件是一个基于 Netty 实现的 TCP 通信模块&#xff0c;用于在 UniApp 插件中提供 TCP 连接、数据发送和连接管理功能。以…

VM中CentOS 7密码重置

重启虚拟机点击e进入内核处理向下划找到UTF-8在后面输入rd.breakctrl X进入单用户模式mount -o remount,rw/sysroot进行挂盘 chroot /sysroot访问系统&#xff0c;并使用passwd修改root密码 出现乱码 输入LANGen touch /.autorelabel 保存配置 exit exit退出等待系统重新打开&…

车规级MOS管AEC-Q101认证的关键参数解读与失效模式-深圳阿赛姆

摘要本文拆解AEC-Q101认证的7大关键测试项&#xff08;UIS/温度循环/THB等&#xff09;&#xff0c;结合M120N06JC等型号实测数据&#xff0c;解析雪崩失效/栅氧击穿/绑定线脱落等故障机理&#xff0c;附选型核查表一、AEC-Q101认证核心测试项与参数解读1.1 非钳位电感开关测试…

嵌入式铁头山羊stm32-ADC实现软件触发的常规序列的单通道转换-Day25

目录 一、实验目的 二、电路连接 三、实验执行&#xff08;五步&#xff09; 1.初始化ADC的IO引脚 2.配置ADC的时钟&#xff0c;注意要小于14MHz 3.根据ADC的编程接口 实现初始化ADC的基本参数 4.配置常规序列并闭合触发输入开关 5.闭合总开关、启动并读取转换结果 四…

多模态模型出现“幻觉”,描述了表格中不存在的内容,如何修正?

在日常工作中&#xff0c;多模态模型的 “幻觉” 问题已成为影响效率的关键痛点 —— 当我们需要模型基于文档生成建议性内容&#xff08;如行业报告分析、论文数据解读等&#xff09;时&#xff0c;模型常因无法准确理解文档信息&#xff0c;输出包含 “虚构内容” 的结果&…

Java AI 智能问数:Function调用版如何重塑企业数据决策

Java AI 智能问数&#xff1a;Function调用版如何重塑企业数据决策 在数字化转型浪潮中&#xff0c;企业一把手常面临数据查询的痛点&#xff1a;分析师需编写复杂SQL&#xff0c;业务人员依赖IT支持&#xff0c;决策链条冗长。传统方法效率低下&#xff0c;而自然语言处理&…

AI-调查研究-74-具身智能 机器人学习新突破:元学习与仿真到现实迁移的挑战与机遇

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-31- 千呼万唤始出来 GPT-5 发布&#xff01;“快的…