定义

字典(dict)是一种无序、可变且可哈希的数据结构,字典是根据一个信息来查找另一个信息,它表示索引用的键和对应的值构成的成对关系。

特点

(1)字典与列表一样,是Python里面的可变数据类型

(2)必须唯一且不可变(如字符串、数字、元组),可以是任意类型。

(3)有无序性。

(4)基于哈希表实现,支持高效查找,查找插入和删除操作的时间复杂度接近 O (1)。

字典的创建方式

一、使用 {} 直接创建字典

语法格式:

d = {key1: value1, key2: value2, ...}  

1、用大括号 { } 包裹键值对(key: value 形式),多个键值对用逗号 , 分隔。
2、键(key):必须是不可变类型(如字符串、数字、元组),且字典内键唯一;
3、值(value):可以是任意 Python 数据类型(字符串、数字、列表、字典等都行)。

示例: 

# 直接用 {} 定义字典,存储学生信息  
student = {"name": "小明",   # 键 "name" 是字符串,值 "小明" 是字符串  "age": 15,       # 键 "age" 是字符串,值 15 是整数  "hobbies": ["篮球", "音乐"]  # 键 "hobbies" 是字符串,值是列表  
}  print(student)  
# 输出: {'name': '小明', 'age': 15, 'hobbies': ['篮球', '音乐']}  

 二、用内置函数 dict() 创建字典

1. 直接传 key=value 形式参数

语法格式:

d = dict(key1=value1, key2=value2, ...)  

说明:

(1)括号里用 key=value 形式传参(类似函数传参),Python 会自动把这些参数转为字典的键值对.

(2)这里的 key 不用加引号(本质是参数名),但实际存到字典里会变成字符串类型的键。 

 示例:

# 用 dict() + key=value 形式创建字典  
person = dict(name="小红", age=20, city="北京")  print(person)  
# 输出: {'name': '小红', 'age': 20, 'city': '北京'}  

 2. 结合 zip() 映射创建字典(“通过映射函数创建” 本质就是这用法)

语法格式:

# 先用 zip(lst1, lst2) 把两个列表 “配对”,再用 dict() 转成字典  
d = dict(zip(lst1, lst2))  

(1)zip(lst1, lst2):把两个列表 对应位置的元素 打包成元组,返回一个可迭代的 zip 对象。比如 lst1 = [10,20]、lst2 = ["cat","bar"],zip 后会得到 (10, 'cat'), (20, 'bar')。

(2)dict() 会把这些元组里的 第一个元素当键、第二个元素当值,最终转成字典。 

示例:

lst1 = [10, 20, 30, 40]  
lst2 = ["cat", "bar", "zoo", "pat"]  # 1. 用 zip 配对两个列表  
zipped = zip(lst1, lst2)  
# 此时 zipped 是可迭代对象,内容类似: (10, 'cat'), (20, 'bar'), (30, 'zoo'), (40, 'pat')  # 2. 用 dict() 转成字典  
result = dict(zipped)  print(result)  
# 输出: {10: 'cat', 20: 'bar', 30: 'zoo', 40: 'pat'}  

 **重点:

(1)lst1 里的元素会作为字典的 键,必须保证不可变且唯一(如果 lst1 有重复元素,后面的会覆盖前面的)。

(2)lst2 里的元素是字典的 值,类型无限制。

(3)如果两个列表长度不一致,zip 会以 较短的列表为准,多余元素会被忽略。

字典的访问

1、使用 d[key]

通过键直接访问对应的值。

缺点:如果键不存在,会抛出 KeyError 异常。

print(d['hello'])  # 输出: 10
# print(d['java'])  # 报错: KeyError: 'java'

2、使用 d.get(key, default=None)

通过键获取值,若键不存在则返回默认值(默认为 None)。

优点:避免 KeyError,增强代码健壮性。 

print(d.get('hello'))        # 输出: 10
print(d.get('java'))         # 输出: None(默认值)
print(d.get('java', '不存在'))  # 输出: '不存在'(自定义默认值)

 

字典的遍历

1、使用字典(Dictionary)类型的一个内置方法 items()

语法格式

dict.items()

dict 表示一个具体的字典对象,比如 my_dict = {'key1': 'value1', 'key2': 'value2'},my_dict.items()的 my_dict 就是字典对象。items() 方法会返回一个包含字典所有键值对的视图对象(dict_items类型),这个视图对象是可迭代的,其中每个元素都是一个由键和值组成的元组

my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
result = my_dict.items()
print(result)
# 输出: dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])

items() 方法通常h结合循环使用

# 字典的遍历
for item in d.items():print(item)  # key=value组成的一个元素

 

2、解包遍历(分别获取 key 和 value ) 
# 在使用for循环遍历时,分别获取key,value
for key, value in d.items():print(key, value)

 

字典的一些相关操作

字典的方法描述说明
d.keys()获取所有的 key 数据
d.values()获取所有的 value 数据
d.pop(key,default)key 存在获取相应的 value,同时删除 key - value 对,否则获取默认值
d.popitem()随机从字典中取出一个 key - value 对,结果为元组类型,同时将该 key - value 从字典中删除
d.clear()清空字典中所有的 key - value 对

示例

my_dict = {'name': '小明', 'age': 18, 'city': '北京'}# 1、d.keys():获取所有的 key 数据keys = my_dict.keys()
print(keys)
# 输出(Python 3 中返回可迭代的 dict_keys 对象,便于遍历等操作 ):
# dict_keys(['name', 'age', 'city'])
# 可转成列表直观查看
print(list(keys))  
# 输出: ['name', 'age', 'city']# 2、d.values():获取所有的 value 数据values = my_dict.values()
print(values)
# 输出(返回 dict_values 对象 ):
# dict_values(['小明', 18, '北京'])
# 转列表
print(list(values))  
# 输出: ['小明', 18, '北京']# 3、d.pop(key, default):根据 key 获取 value 并删除键值对,不存在则用默认值# key 存在的情况
age_value = my_dict.pop('age', '默认值')
print(age_value)  
# 输出: 18 ,同时 my_dict 里的 'age': 18 被删除
print(my_dict)  
# 输出: {'name': '小明', 'city': '北京'}
# key 不存在的情况
gender_value = my_dict.pop('gender', '未知')
print(gender_value)  
# 输出: '未知' ,因为字典里没有 'gender' 这个 key# 4、d.popitem():随机取出一个 key - value 对(Python 3.7+ 后默认按插入顺序,逆序弹出 )item = my_dict.popitem()
print(item)  
# 比如可能输出 ('city', '北京') ,具体取决于字典当前状态,弹出后该键值对从字典删除
print(my_dict)  
# 弹出后字典内容如: {'name': '小明'} # 5、d.clear():清空字典所有 key - value 对my_dict.clear()
print(my_dict)  
# 输出: {} ,字典变成空字典

字典生成式

1、借助 range 构建简单映射(需明确 key、value 逻辑)
# 示例:用 range 生成字典,这里假设 key 是数字,value 是其平方(可按需改 key:value 逻辑)
d = {item: item**2 for item in range(5)}  
print(d)
# 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

item 来自 range 遍历,key:value 是自定义的映射规则(比如示例里 item 做 key,item**2 做 value ) 

2、用 zip 关联两个列表生成字典(适合数据配对场景)
lst1 = ['a', 'b', 'c']
lst2 = [1, 2, 3]
d = {key: value for key, value in zip(lst1, lst2)}  
print(d)
# 输出: {'a': 1, 'b': 2, 'c': 3}

利用 zip(lst1, lst2) 把两个列表对应位置元素打包成元组,遍历元组时拆出 key(来自 lst1 )和 value(来自 lst2 )构建字典 。

关于字典的内容就到这里啦~~

感谢观看!! 

 

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

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

相关文章

【ARM】ARM微架构

1、 文档目标对 ARM 微架构的概念有初步的了解。2、 问题场景在和客户沟通和新同事交流时对于 ARM 架构和微架构二者有什么区别和联系,做一个简单的介绍。3、软硬件环境1、软件版本:不涉及2 、电脑环境:不涉及4、关于 ARM 架构和微架构架构不…

c++注意点(11)----设计模式(工厂方法)

创建型模式工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。为什么需要工厂方法模式?看一个 “没有工厂模式” 的痛点场景:假设你在开发一个游戏,最初只有 “战士…

基于Kubernetes的微服务CI/CD:Jenkins Pipeline全流程实践

一、部署gitlab GitLab 是一个集代码托管、CI/CD、项目管理、安全扫描于一体的 DevOps 平台,提供从代码编写到部署的全生命周期管理。它支持 Git 版本控制,内置自动化流水线,可与 Kubernetes 集成,实现云原生应用的持续交付。同时…

Spring Bean初始化及@PostConstruc执行顺序

目录 1. Bean初始化执行顺序 2. 成员变量初始化顺序 2.1 普通Java类(非Spring环境) (1) 默认初始化(即初始分配内存) (2) 显式初始化 (3) 构造器初始化 (4)完整顺序 2.2 Spring管理的Bean(依赖注入场景) (1) 普通成员变量…

webRTC合并本地源码修改和官方更新

一、总体思路:基于 Git 分支管理改动origin/main 是官方 WebRTC 主干(来自 webrtc.googlesource.com)。my/webrtc 是你自己开发和修改的分支。每次 Google 更新 WebRTC,你从 origin/main 拉新代码,再把 my/webrtc 分支…

c++注意点(12)----设计模式(生成器)

创建型模式生成器模式(Builder Pattern)是一种创建型设计模式,它专注于将复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。就像是做饭,你可以自己慢慢做,各个步骤自己选择。而使用生成…

[特殊字符] VLA 如何“绕过”手眼标定?—— 当机器人学会了“看一眼就动手”

🔮 VLA 如何“绕过”手眼标定?—— 当机器人学会了“看一眼就动手” 作者:石去皿 发布时间:2025年7月 在传统机器人系统中,“手眼标定”是每一个工程师都绕不开的课题。 你必须精确测量相机和机械臂之间的空间变换关系…

《Maven 核心基础笔记(第一天)》

1.说明maven软件依赖管理和项目构建功能maven是为Java项目工作的 功能体现:依赖管理,项目构建 依赖管理:我们只需要写配置文件(pom.xml),maven就会帮我们下载依赖,并且也会下载依赖的依赖。 项目构建:项目源…

Yolo底层原理学习(V1~V3)(第一篇)

一,卷积后的特征图大小计算众所周知,提到深度学习,必不可少的会提及卷积,那么如何计算卷积之后的图片大小呢?下图呈现:如图, 我们令FH,FW为原图像的长度FH*FW。P为padding的长度&…

前端开发项目性能瓶颈分析

1. 使用 rollup-plugin-visualizer 分析构建 借助 rollup-plugin-visualizer 插件,可以分析通过 rollup 构建出的产物内容,并生成可视化图表,帮助你分析打包后的文件大小以及各个模块的占用情况。 1.1. 安装插件 你需要在你的项目中安装 r…

ExoData.h - OpenExo

ExoData.h文件定位源代码1. 头文件依赖2. 核心类声明3. 主要成员函数关节遍历工具关节与配置相关数据/状态操作控制参数/校准4. 主要成员变量总结文件定位 位置:src/ExoData.h 作用:定义 ExoData 类,作为 Exo 系统全局数据的核心容器。它将设…

缓存HDC内容用于后续Direct2D绘制.

思路&#xff1a;把HDC里的内容保存到Direct2D格式的位图里&#xff0c;后续直接调用 renderTarget->DrawBitmap即可。本例中&#xff0c;位图将保存为类的字段。本例中 COM 接口指针皆使用 com_ptr&#xff0c;这是 WinRT 的 COM 智能指针类&#xff0c;com_ptr<I>::…

“抓了个寂寞”:一次实时信息采集的意外和修复

1. 那天下午&#xff0c;舆情系统“迟到”了 那天下午&#xff0c;公司运营那边突然在群里喊&#xff1a;“XX事件都快上热搜榜前十了&#xff0c;咱们系统咋没反应&#xff1f;” 我愣了几秒&#xff0c;立马翻后台日志、爬虫执行记录&#xff0c;结果一查&#xff0c;还真有点…

数据结构之迪杰斯特拉算法

前言&#xff1a;前面两篇文章介绍了生成图的最小生成树的算法&#xff0c;接下来两篇文章会介绍图的最短路径的算法&#xff0c;迪杰斯特拉算法和弗洛伊德算法。迪杰斯特拉算法是用来计算一个点到其他所有点的最短路径&#xff0c;这个点称之为源点。 一、实现流程 回忆一下…

技术文档 | OpenAI 的 Kafka 演进之路与 Pulsar 迁移潜力

导读ChatGPT 用户量指数级暴涨&#xff0c;OpenAI 的 Kafka 集群在一年内增长 20 倍至 30 个集群[1]&#xff0c;其 Kafka 架构面临日均千亿级消息&#xff08;峰值 QPS 800万/秒&#xff09; 的压力。这揭示了一个关键事实&#xff1a;OpenAI 的成功不只依赖模型&#xff0c;更…

【bug】 jetson上opencv无法录制h264本地视频

在Jetson Orin NX上无法使用opencv直接录制h264/h265视频流&#xff08;h264格式的视频流才能在浏览器播放&#xff09; 解决&#xff1a; 软件编码&#xff1a;需要源码编译opencv 1.环境准备 pip uninstall opencv-python sudo apt install build-essential cmake git python…

解决http的web服务中与https服务交互的问题

问题背景&#xff1a; 需要在一个http的web服务中直接跟另一个https服务交互&#xff0c;不经过自身后端。 又来到了熟悉的跨域访问问题。 解决逻辑就是使用nginx转发&#xff0c;涉及到的文件也就是nginx.conf文件&#xff0c;前面解决minio链接时已经有经验了&#xff0c;但…

网站访问信息追踪系统在安全与性能优化中的关键作用——网络安全—仙盟创梦IDE

<?php // 收集访问信息 $visitorInfo未来之窗 [timestamp > date(Y-m-d H:i:s),ip > $_SERVER[REMOTE_ADDR] ?? unknown,page > $_SERVER[REQUEST_URI] ?? unknown,method > $_SERVER[REQUEST_METHOD] ?? unknown,user_agent > $_SERVER[HTTP_USER_A…

Oracle 时间处理函数和操作符笔记

前言 写sql时经常用到时间处理函数&#xff0c;我整理了一份Oracle的常用sql笔记,供大家参考。 如果对你有帮助&#xff0c;请点赞支持~ 多谢&#x1f64f; 笔记 -- 1. 获取当前日期和时间 -- SYSDATE, SYSTIMESTAMP, CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP SELE…

TDengine时序数据库 详解

1. TDengine 简介 TDengine 是一款 高性能、分布式、支持 SQL 的时序数据库&#xff08;Time-Series Database, TSDB&#xff09;&#xff0c;专为 物联网&#xff08;IoT&#xff09;、工业互联网、金融监控、日志分析 等场景设计。其核心特点包括&#xff1a; 超高性能&…