【Python 字典(Dictionary)】
Python 中的字典(Dictionary)是最强大的键值对(key-value)数据结构,用于高效存储和访问数据。以下是字典的核心知识点:
一、基础特性
- 键值对存储:通过唯一键(Key)快速访问值(Value)
- 可变性:支持增删改查操作
- 无序性(Python 3.7+ 默认有序):元素无固定顺序,但插入顺序被保留
- 键的唯一性:键必须唯一且不可变(
int
/str
/tuple
等)person = {"name": "Alice","age": 30,"hobbies": ["reading", "coding"] }
二、创建字典
1. 直接定义
empty_dict = {} # 空字典
student = {"id": 101, "name": "Bob"}
2. 类型转换
dict(name="Charlie", age=25) # → {'name': 'Charlie', 'age': 25}
dict([("a", 1), ("b", 2)]) # → {'a': 1, 'b': 2}
3. 字典推导式
squares = {x: x**2 for x in range(5)} # → {0:0, 1:1, 2:4, 3:9, 4:16}
三、常用操作
1. 访问元素
person = {"name": "Alice", "age": 30}
print(person["name"]) # → "Alice"(直接访问)
print(person.get("age")) # → 30(安全访问)
print(person.get("job", "N/A")) # → "N/A"(默认值)
2. 增删改操作
# 增/改
person["city"] = "New York" # 添加新键值对
person["age"] = 31 # 修改现有值# 删
del person["city"] # 删除指定键
popped = person.pop("age") # 删除并返回值 → 31
person.clear() # 清空字典 → {}
3. 遍历字典
for key in person: # 遍历键print(key)for value in person.values(): # 遍历值print(value)for key, value in person.items(): # 遍历键值对print(f"{key} → {value}")
四、字典方法
方法 | 作用 | 示例 |
---|---|---|
keys() | 返回所有键的视图对象 | list(d.keys()) |
values() | 返回所有值的视图对象 | list(d.values()) |
items() | 返回键值对元组的视图对象 | list(d.items()) |
get(key, default) | 安全获取值 | d.get("age", 0) |
update(other) | 合并字典 | d.update({"city": "NY"}) |
pop(key) | 删除并返回指定键的值 | d.pop("age") |
popitem() | 删除并返回最后一个键值对 | d.popitem() |
setdefault(key) | 获取值,不存在则设置默认值 | d.setdefault("country", "US") |
五、高级用法
1. 合并字典
# Python 3.9+
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
merged = dict1 | dict2 # → {'a':1, 'b':3, 'c':4}# 通用方式
merged = {**dict1, **dict2}
2. 默认字典(defaultdict
)
from collections import defaultdictcounts = defaultdict(int) # 默认值为0
counts["apple"] += 1 # 自动初始化键
3. 有序字典(OrderedDict
)
from collections import OrderedDictordered = OrderedDict()
ordered["a"] = 1
ordered["b"] = 2 # 保持插入顺序
4. 嵌套字典
students = {"101": {"name": "Alice", "scores": [90, 85]},"102": {"name": "Bob", "scores": [78, 92]}
}
六、应用场景
-
配置管理:
config = {"db_host": "localhost","db_port": 3306,"debug_mode": True }
-
计数器:
from collections import defaultdictword_counts = defaultdict(int) for word in ["apple", "banana", "apple"]:word_counts[word] += 1
-
缓存系统:
cache = {} def get_data(key):if key not in cache:cache[key] = fetch_from_db(key) # 模拟数据库查询return cache[key]
-
数据转换:
# 列表转字典 users = [("id1", "Alice"), ("id2", "Bob")] user_dict = dict(users) # → {"id1": "Alice", "id2": "Bob"}
七、性能优化
-
键的哈希值:
- 优先使用不可变类型(如
int
/str
/tuple
)作为键 - 避免使用可变类型(如
list
/dict
)作为键
- 优先使用不可变类型(如
-
内存效率:
# 小整数键优化 d = {i: None for i in range(1000)} # 内存占用更小
-
快速查找:
- 字典的查找时间复杂度为 O(1),远快于列表的 O(n)
八、常见陷阱
-
可变默认参数:
def bad_init(data={}): # 危险!默认参数共享data["count"] = data.get("count", 0) + 1return data# 正确做法 def good_init(data=None):if data is None:data = {}data["count"] = data.get("count", 0) + 1return data
-
键的哈希冲突:
- 自定义对象作为键时需实现
__hash__()
和__eq__()
- 自定义对象作为键时需实现
-
视图对象特性:
d = {"a": 1, "b": 2} keys = d.keys() # 视图对象(动态反映字典变化) d["c"] = 3 print(keys) # → dict_keys(['a', 'b', 'c'])
通过合理使用字典,可以高效处理从简单键值存储到复杂数据映射的各种场景。实际应用中需注意键的选择和性能优化,并根据需求选择标准字典或专用扩展类(如 defaultdict
/OrderedDict
)。
相关文章:
【Python 字典(Dictionary)】
Python 中的字典(Dictionary)是最强大的键值对(key-value)数据结构,用于高效存储和访问数据。以下是字典的核心知识点: 一、基础特性 键值对存储:通过唯一键(Key)快速访…...
Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析
引言 在 Linux 内核中,网络通信和进程间交互(IPC)的核心数据结构之一是 struct sock(即 socket)。其生命周期管理涉及复杂的资源分配与释放逻辑。本文聚焦于 security_sk_free 这一函数,探讨其作用、调用场景以及与安全模块的交互机制,并解答一个常见疑问:在单机间 TC…...
VBA -- 学习Day4
数组 创建数组: Dim 数组名(数组元素上下角标)[As 元素类型] eg. Dim MyArray (1 To 3) As Integer 注意:1.如果不指定元素类型,则是Variant类型 向数组赋值: eg. MyArray(1) 100 MyArray(2) 200…...

Winform(11.案例讲解1)
今天写两个案例,用于更好的理解控件的使用 在写之前先写一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1.案例讲解 { internal class Student { public string …...

电机密集型工厂环境下的无线通信技术选型与优化策略
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 在电机、变频器、电焊机等强电磁干扰源遍布的工业环境中,无线通信系统的可靠性面临严峻挑战。本文从抗干扰能力、传输稳定性、实时性需求三大核心维度出发,结合工…...
Web 自动化之 HTML JavaScript 详解
文章目录 一、HTML 常用标签二、javascript 脚本1、什么是 javascript(js)2、 js变量和函数3、js 弹窗处理4、js 流程控制语句和 switch 结构语句应用 一、HTML 常用标签 HTML:超文本标记语言 超文本:不仅只包含文字,还有超链接、视频…这些…...

一文了解氨基酸的分类、代谢和应用
氨基酸(Amino acids)是在分子中含有氨基和羧基的一类化合物。氨基酸是生命的基石,人类所有的疾病与健康状况都与氨基酸有直接或间接的关系。氨基酸失衡可引起肝硬化、神经系统感染性疾病、糖尿病、免疫性疾病、心血管疾病、肾病、肿瘤等各类疾…...

系统学习算法:动态规划(斐波那契+路径问题)
题目一: 思路: 作为动态规划的第一道题,这个题很有代表性且很简单,适合入门 先理解题意,很简单,就是斐波那契数列的加强版,从前两个数变为前三个数 算法原理: 这五步可以说是所有…...
jquery实现文字点选验证码
文字点选验证码是一种有效的防止自动化攻击的手段。用户需要按照提示顺序点击特定的文字,验证通过后才能进行下一步操作。本文将详细介绍如何使用jQuery实现这种验证码。 一、实现思路 生成验证码:随机生成一组文字,并随机排列在验证码区域…...
VTK|加载ply文件数据进行平移+高程渲染
文章目录 将 .ply 点云或模型数据进行 Elevation 着色并可视化渲染的完整流程🟦 1. **使用 ElevationFilter 给模型上色(根据 Z 值)**🟩 2. **构造 Jet 风格的 Lookup Table(颜色映射表)**🔷 3.…...

JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码
一、源码描述 这是一套房屋租售管理源码,基于SpringBootVue框架,后端采用JAVA开发,源码功能完善,涵盖了房屋租赁、房屋销售、房屋交易等业务。 二、源码截图...

掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
一个普遍的现象是,大模型通常会根据给定的提示直接生成回复。对于一些简单的任务,大模型或许能够较好地应对。然而,当我们面对更加复杂的任务时,往往希望大模型能够表现得更加“智能”,具备适应多样场景和解决复杂问题的能力。为此,AgentScope 提供了内置的 ReAct 智能体…...
AOP实现原理
AOP实现原理 背景实现常用注解 背景 感觉需要掌握, 对理解其他知识点有好处. 实现 动态代理实现. JDK 实现 InvacationHander CGLib Enhancer 轻量级的基于ASM字节码框架. 常用注解 Before After AfterRetruning AfterThrowing Around...

Bearer Token的神秘面纱:深入解析HTTP认证头的设计哲学
为何有些Token会带Bearer? 在接口测试与开发中,我们经常会遇到这样的请求头: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... 这个神秘的"Bearer"前缀从何而来?为何不直接使用Authorization: Token..…...

【国产化】在银河麒麟ARM环境下离线安装docker
1、前言 采用离线安装的方式。 关于离线安装的方式官网有介绍,但是说的很简单,网址:Binaries | Docker Docs 官网介绍的有几种主流linux系统的安装方式,但是没有kylin的,所以在此记录一下。 在安装过程中也遇到了些…...
K8S - Harbor 镜像仓库部署与 GitLab CI 集成实战
引言 在 Kubernetes 环境中,容器镜像的存储与管理至关重要。企业级镜像仓库(如 Harbor)为团队提供了安全、稳定、可扩展的镜像管理解决方案。 一、Harbor 安装与配置 Harbor 是由 VMware 开源的企业级云原生镜像仓库,它不仅支持…...
ASCII码的快速记忆方法
当然!记住ASCII码的关键是找到规律和分组记忆。以下是一些快速记忆的方法: 1. 记住关键分界点 0~31:控制字符(不可打印,如换行、制表符等),不需要全记,知道0是NULL,10是…...

java volatile关键字
volatile 是 Java 中用于保证多线程环境下变量可见性和禁止指令重排序的关键字。 普通变量不加volatile修饰有可见性问题,即有线程修改该变量值,其他线程无法立即感知该变量值修改了。代码: private static int intVal 0; // 普通变量未加 …...
解决SQL Server SQL语句性能问题(9)——正确使用索引
前述章节中,我们介绍和讲解了SQL调优所需要的基本知识和分析方法,那么,通过前述这些知识和方法定位到问题后,接下来,我们该怎么做呢?那就是本章的内容,给出解决SQL语句性能问题的、科学而合理的方案和方法。 本章主要对解决SQL语句性能问题的几种常用方法进行说明和讲解…...

Vibe Coding: 优点与缺点
如果你最近在开发圈子里,你很可能听说过这个新趋势"vibe coding"(氛围编程)。 我只能说我对此感受复杂。以下是原因。 优势 在构建新项目时,靠着氛围编程达到成功感觉很自由!但对于遗留代码来说情况就不同了,尽管也不是不可能。 实时反馈和快速迭代 Cursor(…...

技术分享 | 如何在2k0300(LoongArch架构)处理器上跑通qt开发流程
近期迅为售后团队反馈,许多用户咨询:2K0300处理器采用了LA264处理器核,若要在该处理器上运行Qt程序,由于架构发生了变化,其使用方法是否仍与ARM平台保持一致? 单纯回答‘一致’或‘不一致’缺乏说服力&…...
产品经理如何借助 DeepSeek 提升工作效能
在数字化时代的浪潮中,产品经理肩负着推动产品从概念到成功落地的重任,面临着复杂多变的市场环境、层出不穷的用户需求以及紧锣密鼓的项目周期。而 DeepSeek 这一先进的人工智能工具,宛如一把 “瑞士军刀”,为产品经理在各个工作环…...

基于卷积神经网络和Pyqt5的猫狗识别小程序
任务描述 猫狗分类任务(Dogs vs Cats)是Kaggle平台在2013年举办的一个经典计算机视觉竞赛。官方给出的Kaggle Dogs vs Cats 数据集中包括由12500张猫咪图片和12500张狗狗图片组成的训练集,12500张未标记照片组成的测试集。选手需要在规定时间…...
Hadoop 和 Spark 生态系统中的核心组件
以下是 Hadoop 和 Spark 生态系统的核心组件及其功能: Hadoop 生态核心组件 1. HDFS(Hadoop 分布式文件系统) - 命令/工具: hdfs 命令(如 hdfs dfs -put 等)。 - 作用:分布式存储海量数据&a…...

解锁健康养生新境界
在追求高品质生活的当下,健康养生早已超越 “治未病” 的传统认知,成为贯穿全生命周期的生活艺术。它如同精密的交响乐,需饮食、运动、心理与生活习惯多维度协奏,方能奏响生命的强音。 饮食养生讲究 “顺时、适性”。遵循二十四节…...
MQTT:轻量级物联网通信协议详解
引言 在物联网(IoT)迅速发展的今天,设备之间的高效通信变得至关重要。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的发布/订阅消息传输协议,因其低带宽、低延迟和易于实现的特性,…...
C 语言逻辑运算符:组合判断,构建更复杂的条件
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 在 C 语言编程中,我们已经学习了如何使用比较运算符(如 ==, <, >)来判断两个值之间的关系,从而得到“真”或“假”的结果。但很多时候,我们需要根据多个条件的组合…...

基于OpenCV的人脸识别:EigenFaces算法
文章目录 引言一、概述二、代码解析1. 准备工作2. 加载训练图像3. 设置标签4. 准备测试图像5. 创建和训练识别器6. 进行预测7. 显示结果 三、代码要点总结 引言 人脸识别是计算机视觉领域的一个重要应用,今天我将通过一个实际案例来展示如何使用OpenCV中的EigenFac…...

【深度学习新浪潮】智能追焦技术全解析:从算法到设备应用
一、智能追焦技术概述 智能追焦是基于人工智能和自动化技术的对焦功能,通过深度学习算法识别并持续跟踪移动物体(如人、动物、运动器械等),实时调整焦距以保持主体清晰,显著提升动态场景拍摄成功率。其核心优势包括: 精准性:AI 算法优化复杂运动轨迹追踪(如不规则移动…...

网络研讨会开发注册中, 5月15日特励达力科,“了解以太网”
在线研讨会主题 Understanding Ethernet - from basics to testing & optimization 了解以太网 - 从基础知识到测试和优化 注册链接# https://register.gotowebinar.com/register/2823468241337063262 时间 北京时间 2025 年 5 月 15 日 星期四 下午 3:30 - 4:30 适宜…...