Python教程(11)——Python中的字典dict的用法介绍
dict的用法介绍
- 创建字典
- 访问字典
- 修改字典
- 删除字典
- 字典的相关函数
列表虽然好,但是如果需要快速的数据查找,就必须进行需要遍历,也就是最坏情况需要遍历完一遍才能找到需要的那个数据,时间复杂度是O(n),显然这个速度是很难接受的,于是就必须要有新的数据结构出现,于是字典就诞生了!
在Python中,字典(Dictionary)是一种无序的数据结构,用于存储键值对(key-value)。字典中的每个元素由一个键(key)和一个对应的值(value)组成,键和值之间使用冒号(:)进行分隔,每个键值对之间使用逗号(,)进行分隔。字典中的键必须是唯一的,而值可以是任意类型的对象。有点类似C++语言中的映射,时间复杂度是O(1)。
Python中的字典主要有以下一些特点:
- 无序性:字典中的元素没有固定的顺序,不能通过索引来访问元素。
- 可变性:可以向字典中添加、修改或删除元素。
- 唯一键:字典中的键必须是唯一的,如果添加了相同的键,则后面的键值对会覆盖前面的键值对。
创建字典
很显然,使用字典之前需要先创建。在Python中,可以使用花括号 {}
或者 dict()
函数来创建字典。字典由键值对组成,每个键值对之间使用逗号 ,
分隔。键和值之间使用冒号 :
分隔。以下是几种创建字典的方式示例:
- 使用花括号
{}
创建字典:
# 创建一个空字典
my_dict = {}
# 创建一个包含键值对的字典
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
- 使用
dict()
函数创建字典:
# 创建一个空字典
my_dict = dict()
# 创建一个包含键值对的字典
my_dict = dict(key1='value1', key2='value2', key3='value3')
# 使用列表或元组创建字典
my_dict = dict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])
- 使用字典推导式创建字典:
# 创建一个包含键值对的字典
my_dict = {key: value for key, value in [('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')]}
print(my_dict)
上面的第三种写法可能不少同学不容易理解,大家可以先记住就行,后面的教程我们会讲到。
访问字典
创建字典,我们肯定需要进行访问,不然创建的就没什么意义了。在Python中,可以通过键来访问字典中的值。以下是几种常见的访问字典的方式:
- 利用方括号和键的方式,可以直接访问字典中对应键的值。
person = {"name": "John", "age": 25, "city": "New York"}
print(person["name"]) # 输出: John
- 使用
get()
方法访问值,get()
方法可以根据给定的键来获取对应的值,如果键不存在,会返回None
。
person = {"name": "John", "age": 25, "city": "New York"}
print(person.get("name")) # 输出: John
- 使用
keys()
方法遍历所有键,keys()
方法返回一个包含字典所有键的迭代器,可以用于遍历所有键。
person = {"name": "John", "age": 25, "city": "New York"}
for key in person.keys():print(key) # 输出: name, age, city
- 使用
values()
方法遍历所有值,values()
方法返回一个包含字典所有值的迭代器,可以用于遍历所有值。
person = {"name": "John", "age": 25, "city": "New York"}
for value in person.values():print(value) # 输出: John, 25, New York
- 使用
items()
方法遍历所有键值对,items()
方法返回一个包含字典所有键值对的迭代器,可以用于遍历所有键值对。
person = {"name": "John", "age": 25, "city": "New York"}
for key, value in person.items():print(key, value) # 输出: name John, age 25, city New York
以上这些方式都是一些访问字典的常用方法,你可以根据具体需求来访问字典中的数据。如果键不存在,使用方括号的方式会引发KeyError
异常,而get()
方法会返回None
,需要在代码中做好判断。因此,根据实际情况选择合适的访问方式是很重要的。
修改字典
修改字典,主要就是修改字典中的元素。在Python中,可以通过以下方式修改字典中的值:
- 通过键直接赋值修改值,利用方括号和键的方式,可以直接通过赋值操作修改字典中对应键的值。
person = {"name": "John", "age": 25, "city": "New York"}
person["name"] = "Tom"
print(person) # 输出: {"name": "Tom", "age": 25, "city": "New York"}
- 使用
update()
方法批量修改键值对,update()
方法接受一个字典作为参数,用于同时修改多个键值对。
person = {"name": "John", "age": 25, "city": "New York"}
person.update({"name": "Tom", "age": 30})
print(person) # 输出: {"name": "Tom", "age": 30, "city": "New York"}
- 使用
setdefault()
方法修改值或添加新键值对,setdefault()
方法接受两个参数,第一个参数为要设置的键,第二个参数为默认值。如果键存在,则返回对应的值;如果键不存在,则设置该键的值为默认值,并返回默认值。
person = {"name": "John", "age": 25}
person.setdefault("city", "New York")
print(person) # 输出: {"name": "John", "age": 25, "city": "New York"}person.setdefault("country", "USA")
print(person) # 输出: {"name": "John", "age": 25, "city": "New York", "country": "USA"}
以上的这些方法都是可以修改字典的,你可以根据具体需求来修改字典中的值。如果键不存在,则新增键值对;如果键存在,则修改对应的值。记住,字典中的键必须是唯一的,如果重复使用相同的键,则后面的值会覆盖前面的值。
删除字典
在Python中,可以通过以下方式删除字典或字典中的元素:
- 使用
del
语句删除字典或字典中的键值对,使用del
语句后跟字典名和要删除的键,可以删除字典中的键值对。如果使用del
语句后跟字典名,则会删除整个字典。
person = {"name": "John", "age": 25, "city": "New York"}
del person["age"] # 删除键为"age"的键值对
print(person) # 输出: {"name": "John", "city": "New York"}del person # 删除整个字典
- 使用
pop()
方法删除指定键的键值对并返回其值,pop()
方法接受一个键作为参数,用于删除字典中指定键的键值对,并返回该键对应的值。
person = {"name": "John", "age": 25, "city": "New York"}
age = person.pop("age") # 删除键为"age"的键值对并返回值
print(person) # 输出: {"name": "John", "city": "New York"}
print(age) # 输出: 25
3 使用clear()
方法清空字典中的所有键值对,clear()
方法用于移除字典中的所有元素,使字典变为空字典。
person = {"name": "John", "age": 25, "city": "New York"}
person.clear() # 清空字典
print(person) # 输出: {}
字典的相关函数
以下是整理的一些关于字典的相关函数,这些方法可用于对字典进行各种操作,如获取值、添加键值对、删除键值对等。如果有错误的,欢迎大家指出。
函数名 | 解释 |
---|---|
clear() | 移除字典中的所有元素。 |
copy() | 返回字典的浅复制副本。 |
fromkeys(seq[, value]) | 创建一个新字典,使用指定的键和每个键对应的值。 |
get(key[, default]) | 返回字典中指定键的值。如果键不存在,则返回默认值。 |
items() | 返回字典中所有键值对的元组视图。 |
keys() | 返回字典中所有键的视图。 |
pop(key[, default]) | 弹出并返回字典中指定键的值。如果键不存在,则返回默认值。 |
popitem() | 弹出并返回字典中的一对键值。 |
setdefault(key[, default]) | 返回字典中指定键的值。如果键不存在,则在字典中添加键并返回默认值。 |
update([other]) | 将其他字典或键值对更新到字典中。 |
values() | 返回字典中所有值的视图。 |
更多精彩内容,请关注同名公众:一点sir(alittle-sir)
相关文章:

Python教程(11)——Python中的字典dict的用法介绍
dict的用法介绍 创建字典访问字典修改字典删除字典字典的相关函数 列表虽然好,但是如果需要快速的数据查找,就必须进行需要遍历,也就是最坏情况需要遍历完一遍才能找到需要的那个数据,时间复杂度是O(n),显然这个速度是…...
三道dfs题
一:1114. 棋盘问题 - AcWing题库 分别枚举行和列,能填的地方就填,dfs就行 #include <iostream> using namespace std;const int N 10; char g[N][N]; int n, k; int res; bool st[N];void dfs(int u, int cnt) // u枚举行 {if(cnt …...

Seaborn数据可视化(四)
目录 1.绘制箱线图 2.绘制小提琴图 3.绘制多面板图 4.绘制等高线图 5.绘制热力图 1.绘制箱线图 import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据(例如,使用seaborn自带的数据集) tips sns.load_dataset("t…...

kubernetes deploy standalone mysql demo
kubernetes 集群内部署 单节点 mysql ansible all -m shell -a "mkdir -p /mnt/mysql/data"cat mysql-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volumelabels:type: local spec:storageClassName: manualcapacity:storage: 5Gi…...
【Map】Map集合有序与无序测试案例:HashMap,TreeMap,LinkedHashMap(121)
简单介绍常用的三种Map:不足之处,欢迎指正! HashMap:put数据是无序的; TreeMap:key值按一定的顺序排序;数字做key,put数据是有序,非数字字符串做key,put数据…...

TiDB Serverless Branching:通过数据库分支简化应用开发流程
2023 年 7 月 10 日,TiDB Serverless 正式商用。这是一个完全托管的数据库服务平台(DBaaS),提供灵活的集群配置和基于用量的付费模式。紧随其后,TiDB Serverless Branching 的测试版也发布了。 TiDB Serverless Branc…...

运用亚马逊云科技Amazon Kendra,快速部署企业智能搜索应用
亚马逊云科技Amazon Kendra是一项由机器学习(ML)提供支持的企业搜索服务。Kendra内置数据源连接器,支持快速访问Amazon S3、AmazonRDS、AmazonFSX以及其他外部数据源,帮助用户自动提取文档并建立索引。Kendra支持超过30多种多国语…...
C# 使用 OleDbConnection 连接读取Excel的方法
Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。 (1)Sqlconnetcion类的对象连接是SQL Server数据库; (2)OracleConnection类的对象连接Oracle数据库&…...

【LeetCode-中等题】98. 验证二叉搜索树
文章目录 题目方法一:BFS 层序遍历方法二: 递归方法三: 中序遍历(栈)方法四: 中序遍历(递归) 题目 思路就是首先得知道什么是二叉搜索树 左孩子在(父节点的最小值&#x…...

Leetcode-每日一题【剑指 Offer 37. 序列化二叉树】
题目 请实现两个函数,分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 …...
删除无点击数据offer数据分析使用
梳理思路: 1、 获取 7month 和 8month fullreport 报表中 所有offer;输出结果:offerid, totalClickCount; 2、 分析数据7month totalClickCount0 and 8month totalClickCount0 的offer去除; result.…...

【Apollo学习笔记】——规划模块TASK之SPEED_BOUNDS_PRIORI_DECIDER
文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_PRIORI_DECIDER流程将障碍物映射到ST图中ComputeSTBoundary(PathDecision* path_decision)ComputeSTBoundary(Obstacle* obstacle)GetOverlapBoundaryPointsComputeSTBounda…...

物理机ping不通windows server 2012
刚才尝试各种方法,在物理机上就是ping不能wmware中的windows server 2012 . 折腾了几个小时,原来是icmp 被windows server 2012 禁用了 现在使用使用以下协议就能启用Icmp协议。 netsh firewall set icmpsetting 8然后,就能正常ping 通虚…...
誉天HCIE-Datacom丨为什么选择誉天数通HCIE课程学习
大家好,我是誉天HCIE-Datacom的一名学员,在2022年觉得自己技术水平不够,想要提升自己,经朋友介绍在誉天报的名。 听朋友说誉天的阮Sir的课讲的非常好,我在B站上看了几节阮老师的课确实比之前在听得其他机构的课程讲的要…...

Python文本终端GUI框架详解
今天笔者带大家,梳理几个常见的基于文本终端的 UI 框架,一睹为快! Curses 首先出场的是 Curses。 Curses 是一个能提供基于文本终端窗口功能的动态库,它可以: 使用整个屏幕 创建和管理一个窗口 使用 8 种不同的彩色 为程序提供…...

01_lwip_raw_udp_test
1.打开UDP的调试功能 (1)设置宏定义 (2)打开UDP的调试功能 (3)修改内容,串口助手打印的日志信息自动换行 2.电脑端连接 UDP发送一帧数据 3.电路板上发送一帧数据...

学习ts(十一)本地存储与发布订阅模式
localStorage实现过期时间 目录 准备 安装 npm i rollup typescript rollup-plugin-typescript2// tsconfig.json"module": "ESNext","moduleResolution": "node", "strict": false, // rollup.config.js import …...
MySQL对NULL值处理
在使用数据库时,有时需要表示未知值,这时可以使用NULL值表示。引入NULL值后,会对原有的使用产生影响,这里记录下常见的场景,以做记录。 NULL含义 在MySQL中,NULL值表示一个未知值,表示不可知、…...

Vector 动态数组(迭代器)
C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组(模板语法) 本文目标 1 熟悉迭代器设计模式; 2 实现数组的迭代器; 3 基于迭代器的容器遍历; 迭代器语法介绍 对迭…...
多组背包恰好装满方案数
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 现在有一个大小n*1的收纳盒,我们手里有无数个大小为1*1和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒 分析&…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...