python | 字典
一、字典的基础特性特性说明键key必须是不可变类型字符串、数字、元组且唯一重复键会覆盖值value可任意类型列表、字典、函数等可重复可变性支持增 删 改键值对是可变对象查找效率基于哈希表实现查找 / 修改效率远高于列表O (1) 时间复杂度二、字典的创建1. 基础创建大括号{}python运行展开代码语言TXT自动换行AI代码解释# 空字典 empty_dict {} # 普通字典键唯一重复键会覆盖 student { name: Tom, age: 18, gender: 男, scores: [85, 90, 95], # 值为列表 address: {city: 北京, district: 海淀} # 值为字典 } # 重复键后定义的覆盖先定义的 duplicate_key {a: 1, a: 2} print(duplicate_key) # 输出{a: 2}2.dict()构造函数创建python运行展开代码语言TXT自动换行AI代码解释# 方式1传入键值对参数 person dict(nameLisa, age20, gender女) print(person) # {name: Lisa, age: 20, gender: 女} # 方式2传入可迭代对象如列表/元组的二元组 data [(id, 101), (score, 98)] info dict(data) print(info) # {id: 101, score: 98} # 方式3fromkeys() 创建统一赋值默认值 # 语法dict.fromkeys(键列表, 默认值) keys [a, b, c] default_dict dict.fromkeys(keys, 0) print(default_dict) # {a: 0, b: 0, c: 0}三、字典的核心操作1. 取值访问值python运行展开代码语言TXT自动换行AI代码解释student {name: Tom, age: 18} # 方式1键索引键不存在会报错 KeyError print(student[name]) # Tom # 方式2get() 方法推荐键不存在返回默认值避免报错 print(student.get(age)) # 18 print(student.get(height, 1.75)) # 1.75键不存在返回默认值 print(student.get(height)) # None无默认值时返回 None2. 修改 / 新增值python运行展开代码语言TXT自动换行AI代码解释student {name: Tom, age: 18} # 修改已有键的值 student[age] 19 print(student) # {name: Tom, age: 19} # 新增键值对键不存在时自动新增 student[height] 1.80 student[scores] [85, 90] print(student) # {name: Tom, age: 19, height: 1.8, scores: [85, 90]}3. 删除键值对python运行展开代码语言TXT自动换行AI代码解释student {name: Tom, age: 18, height: 1.8} # 方式1del 关键字键不存在报错 del student[height] print(student) # {name: Tom, age: 18} # 方式2pop() 方法删除并返回值键不存在可指定默认值 age student.pop(age) print(age) # 18 print(student) # {name: Tom} # 方式3popitem() 方法删除最后插入的键值对返回元组 student[gender] 男 item student.popitem() print(item) # (gender, 男) print(student) # {name: Tom} # 方式4clear() 清空所有键值对 student.clear() print(student) # {}4. 成员判断判断键是否存在python运行代码语言TXT自动换行AI代码解释student {name: Tom, age: 18} # 语法key in dict仅判断键不判断值 print(name in student) # True print(height in student) # False print(18 in student) # False值不存在于键中四、字典的常用方法方法作用dict.keys()返回所有键的可迭代对象视图可转列表dict.values()返回所有值的可迭代对象视图dict.items()返回所有键值对的可迭代对象元组形式如 (key, value)dict.update(dict2)合并字典将 dict2 的键值对更新到当前字典重复键覆盖dict.copy()浅拷贝字典避免修改拷贝影响原字典方法示例python运行展开代码语言TXT自动换行AI代码解释student {name: Tom, age: 18, gender: 男} # 1. 获取所有键/值/键值对 print(list(student.keys())) # [name, age, gender] print(list(student.values())) # [Tom, 18, 男] print(list(student.items())) # [(name, Tom), (age, 18), (gender, 男)] # 2. 遍历字典常用 items() for key, value in student.items(): print(f{key}: {value}) # 输出 # name: Tom # age: 18 # gender: 男 # 3. 合并字典 new_info {age: 19, height: 1.8} student.update(new_info) print(student) # {name: Tom, age: 19, gender: 男, height: 1.8} # 4. 拷贝字典 student_copy student.copy() student_copy[name] Jerry print(student) # {name: Tom, ...}原字典不变 print(student_copy) # {name: Jerry, ...}五、字典的高级用法1. 字典推导式快速生成字典python运行展开代码语言TXT自动换行AI代码解释# 语法{key: value for 变量 in 可迭代对象 if 条件} # 示例1生成数字-平方字典 square_dict {i: i*i for i in range(1, 5)} print(square_dict) # {1: 1, 2: 4, 3: 9, 4: 16} # 示例2筛选值大于 80 的成绩 scores {math: 90, english: 75, chinese: 85} high_scores {k: v for k, v in scores.items() if v 80} print(high_scores) # {math: 90, chinese: 85}2. 嵌套字典的访问python运行展开代码语言TXT自动换行AI代码解释# 嵌套字典字典的值是字典 school { class1: { name: 一班, students: [{name: Tom, age: 18}, {name: Lisa, age: 17}] }, class2: { name: 二班, students: [{name: Jerry, age: 18}] } } # 访问二班第一个学生的姓名 print(school[class2][students][0][name]) # Jerry # 修改一班的名称 school[class1][name] 一年级一班 print(school[class1][name]) # 一年级一班3. 有序字典Python 3.7 无需低版本用 OrderedDictPython 3.7 及以上版本的普通字典已默认保留插入顺序低版本可使用collections.OrderedDictpython运行展开代码语言TXT自动换行AI代码解释from collections import OrderedDict od OrderedDict() od[a] 1 od[b] 2 od[c] 3 print(od) # OrderedDict([(a, 1), (b, 2), (c, 3)])4. 字典的解包python运行展开代码语言TXT自动换行AI代码解释# 解包字典为关键字参数 def print_info(name, age): print(f姓名{name}年龄{age}) info {name: Tom, age: 18} print_info(**info) # 等价于 print_info(nameTom, age18) → 姓名Tom年龄18 # 合并字典Python 3.9 支持 | 运算符 dict1 {a: 1, b: 2} dict2 {b: 3, c: 4} merged_dict dict1 | dict2 print(merged_dict) # {a: 1, b: 3, c: 4}六、常见注意事项键的不可变性列表、字典等可变类型不能作为键否则报错TypeErrorpython运行代码语言TXT自动换行AI代码解释# 错误示例列表作为键 # invalid_dict {[1,2]: value} # TypeError: unhashable type: list # 正确示例元组不可变作为键 valid_dict {(1,2): value}浅拷贝 vs 深拷贝嵌套字典的浅拷贝仅拷贝外层内层仍共享需用copy.deepcopy()python运行代码语言TXT自动换行AI代码解释import copy nested_dict {a: {b: 1}} deep_copy copy.deepcopy(nested_dict) deep_copy[a][b] 2 print(nested_dict) # {a: {b: 1}}原字典不变避免 KeyError优先使用get()方法取值或先判断键是否存在。核心总结字典是「键值对」映射核心优势是快速查找键唯一且不可变值可任意修改常用操作取值get()、修改 / 新增[]、删除pop()/del、遍历items()推导式和嵌套是字典的高频高级用法需重点掌握。

相关新闻

【2025最新】基于SpringBoot+Vue的大学生在线租房平台管理系统源码+MyBatis+MySQL

【2025最新】基于SpringBoot+Vue的大学生在线租房平台管理系统源码+MyBatis+MySQL

💡实话实说:用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否,咱们都是朋友,能帮的地方我绝不含糊。买卖不成仁义在,这就是我的做人原则。摘要 随着城市化进程的加速和大学生就业流动性的增强&a…

2026/5/17 11:59:00 阅读更多 →
突发!第一批养龙虾“OpenClaw”的人已中招!有人2小时消耗Token 100美元,有人银行卡密码、身份信息、社交记录、商业机密已被黑客窃取!

突发!第一批养龙虾“OpenClaw”的人已中招!有人2小时消耗Token 100美元,有人银行卡密码、身份信息、社交记录、商业机密已被黑客窃取!

点击上方“码农突围”,马上关注 这里是码农充电第一站,回复“666”,获取一份专属大礼包 真爱,请设置“星标”或点个“在看”这是【码农突围】的第 493 篇原创分享作者 l 突围的鱼来源 l 码农突围(ID:smarty…

2026/5/17 8:53:33 阅读更多 →
理解日志基础:使用Python进行有效的日志记录

理解日志基础:使用Python进行有效的日志记录

为什么要进行日志记录?日志记录允许您跟踪事件,当一个应用程序运行时,您可以了解它做了什么或在某个时间点发生了什么错误。这对于调试和监控应用程序来说是非常有用的。Python日志记录简介Python的 logging 模块提供了灵活的日志记录系统。与…

2026/5/17 10:39:39 阅读更多 →

最新新闻

神经网络概念优先教学:从认知直觉到灰盒理解

神经网络概念优先教学:从认知直觉到灰盒理解

1. 项目概述:这不是又一本“手撕矩阵”的神经网络书“NN#6 — Neural Networks Decoded: Concepts Over Code”这个标题一出来,我就在咖啡机旁多按了两次萃取键——不是因为兴奋,而是本能地警觉。过去十年里,我带过三十多个AI方向…

2026/7/3 19:49:06 阅读更多 →
XGBoost面试深水区:从参数调优到系统诊断的实战逻辑

XGBoost面试深水区:从参数调优到系统诊断的实战逻辑

1. 这不是一份“背诵清单”,而是一份XGBoost面试实战手记我带过二十多届数据科学方向的实习生,也作为技术面试官参与过上百场中高级算法岗的终面。每次聊到XGBoost,总有人一上来就背“XGBoost是GBDT的工程优化版本”“用了二阶泰勒展开”——…

2026/7/3 19:49:06 阅读更多 →
一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内的 internal 类型…

2026/7/3 19:47:05 阅读更多 →
PIC18F87K22与DS28EC20的1-Wire EEPROM存储方案

PIC18F87K22与DS28EC20的1-Wire EEPROM存储方案

1. 项目背景与核心需求 在嵌入式系统开发中,持久化存储用户设置和偏好是一个常见但关键的需求。想象一下,你开发了一个智能温控器,用户精心调整的温度偏好、定时设置和界面主题,如果每次断电后都需要重新设置,那体验会…

2026/7/3 19:47:05 阅读更多 →
如何修复Android设备认证问题:Play Integrity Fix完全指南

如何修复Android设备认证问题:Play Integrity Fix完全指南

如何修复Android设备认证问题:Play Integrity Fix完全指南 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 你是否曾经遇到过这种情况:解锁…

2026/7/3 19:47:05 阅读更多 →
DCS部署指南:生产环境数据收集服务最佳实践

DCS部署指南:生产环境数据收集服务最佳实践

DCS部署指南:生产环境数据收集服务最佳实践 【免费下载链接】dcs DCS(Data Colleciton Service) is a service for collecting performance data. 项目地址: https://gitcode.com/openeuler/dcs 前往项目官网免费下载:https://ar.openeuler.org/a…

2026/7/3 19:45:04 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻