学习python的第十天之数据类型——dict字典
学习python的第十天之数据类型——dict字典
Python 中的字典(Dictionary)是一个非常强大的内置数据类型,它用来存储键值对(key-value pairs)信息。字典是无序的,这意味着它们不会记录你添加键值对的顺序;然而,从 Python 3.7 开始,字典是按照插入顺序进行排序的,这是一种实现上的细节,但在 Python 3.6 以及更早的版本中并无此保证。字典中的键必须是唯一的,而值则可以是任何数据类型。
支持的数据类型:
int,str,float,bool,complex,list,dictionary,tuple,set特点:
- 以键值对保存
- 键不能重复,不能更改,但值可以
- 字典没有下标,因为底层实现也是哈希表
创建字典
可以使用大括号
{}和冒号:来创建一个字典。
# 创建一个空字典
my_dict = {}
print(my_dict) # 输出: {}
使用 dict() 构造函数:
my_dict = dict()
print(my_dict) # 输出: {}
或者传入一个包含元组的列表,每个元组代表一个键值对:
my_dict = dict([('name', 'John'), ('age', 30), ('city', 'New York')])
print(my_dict) # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}
# 创建一个包含一些键值对的字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York', 'high': 1.75, 'list': [1,2,3], 'tuple': (4,5,6), 'dic': {'1': 1}, 'set': {7,8,9}}
print(my_dict)
# 输出: {'name': 'Alice', 'age': 25, 'city': 'New York', 'high': 1.75, 'list': [1, 2, 3], 'tuple': (4, 5, 6), 'dic': {'1': 1}, 'set': {8, 9, 7}}
字典的key键必须是不可变的数据类型,如int,str,float,tuple,bool
# 创建一个包含一些键值对的字典
my_dict = {'one': 1, 2: 'two', 3.0: 3, (4,): 'four', True: 5}
print(my_dict)
# 输出: {'one': 1, 2: 'two', 3.0: 3, (4,): 'four', True: 5}
访问字典中的值
可以通过键来访问字典中的值。
如果尝试访问一个不存在的键,Python 会抛出一个
KeyError。
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}# 访问字典中的值
name = my_dict['name'] # 输出 'Alice'
age = my_dict['age'] # 输出 30# 使用get()方法访问字典中的值
city = my_dict.get('city') # 输出 'New York'job = my_dict.get('job')
print(job) # 输出 'None'country = my_dict.get('country', 'Unknown')
print(country) # 输出 'Unknown',因为'country'键不存在
添加或修改字典
当键值存在时,可以通过键名来修改字典中的值:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
my_dict['age'] = 31
print(my_dict) # 输出: {'name': 'John', 'age': 31, 'city': 'New York'}
当键值不存在时,可以通过键名来添加字典中的键值对:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
my_dict['job'] = 'Teacher'
print(my_dict) # 输出: {'name': 'John', 'age': 30, 'city': 'New York', 'job': 'Teacher'}
删除字典中的元素
可以使用
del语句或者pop()方法来删除字典中的元素:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
del my_dict['city'] # 删除键是 'city' 的键值对
print(my_dict) # 输出: {'name': 'John', 'age': 30}value = my_dict.pop('age') # 删除键是 'age' 的键值对,并返回其值
print(my_dict) # 输出: {'name': 'John'}
可以使用
popitem()方法来删除字典中的随机元素:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
value = my_dict.popitem()
print(my_dict) # 输出: {'name': 'John', 'age': 30}
字典的遍历
可以遍历字典的键、值或者键值对:
- 遍历键:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for key in my_dict:print(key)
# name
# age
# city
- 或者:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for key in my_dict.keys():print(key)
# name
# age
# city
- 遍历值:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for value in my_dict.values():print(value)
# John
# 30
# New York
- 遍历键值对:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for key, value in my_dict.items():print(key, value)
# name John
# age 30
# city New York
字典的常用函数
- 返回所有键的列表
keys():返回字典中所有键的视图对象。这个视图对象会随字典的改变而改变,但它本身并不支持任何修改操作(比如添加或删除键)。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} keys = my_dict.keys() print(keys) # 输出: dict_keys(['name', 'age', 'city'])
- 返回所有值的列表
- **
values()**:返回字典中所有值的视图对象。与keys()类似,这个视图对象也会随字典的改变而改变,但不支持修改。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} values = my_dict.values() print(values) # 输出: dict_values(['Alice', 30, 'New York'])
- 返回所有键值对的元组列表。
- **
items()**:返回字典中所有键值对的视图对象(一个列表),每个键值对都是一个元组做为列表的一个元素。这个视图对象同样会随字典的改变而改变,但不支持修改。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} items = my_dict.items() print(items) # 输出: dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])
- 更新字典
- **
update(other_dict)**:用other_dict中的键值对来更新当前字典。如果other_dict中的键在当前字典中已经存在,则对应的值会被替换;如果不存在,则新的键值对会被添加到当前字典中。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York', 'job': 'Teacher'} other_dict = {'age': 25, 'job': 'Engineer'} my_dict.update(other_dict) print(my_dict) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York', 'job': 'Engineer'}
- 获取键的值
- **
get(key, default)**:获取字典中指定键的值。如果键不存在,则返回指定的默认值,而不是抛出KeyError。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} age = my_dict.get('age', 0) # 键'age'存在,返回其值30 print(age) # 输出: 30country = my_dict.get('country', 'Unknown') # 键'country'不存在,返回默认值'Unknown' print(country) # 输出: Unknown
- 为字典中的某个键设置一个默认值
setdefault(key, default):如果键不存在于字典中,则添加键并将默认值设为其值;如果键已经存在,则返回该键的值,而不改变字典。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} hobby = my_dict.setdefault('hobby', 'Reading') # 键'hobby'不存在,添加并返回默认值'Reading' print(hobby) # 输出: Reading print(my_dict) # 输出: {'name': 'Alice', 'age': 30, 'city': 'New York', 'hobby': 'Reading'}name = my_dict.setdefault('name', 'Bob') # 键'name'存在,返回其值'Alice'而不改变字典 print(name) # 输出: Alice
- 检查一个键是否存在于字典中
in和not in:这两个操作符用于检查一个键是否存在于字典中。in返回True如果键在字典中,否则返回False;not in则相反。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} print('name' in my_dict) # 输出: True print('job' not in my_dict) # 输出: True
- 检查一个键的值是否存是某个值(只能用于判断值,不能判断键)
is和is not:这两个操作符用于检查一个键是否存在于字典中。is返回True如果键在字典中,否则返回False;is not则相反。my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'} print(my_dict['name'] is 'Alice') # 输出: True print(my_dict['age'] is not 'age') # 输出: True
- 字典展开运算符
- 在Python 3.5及以上版本中,
**可以作为字典展开运算符使用。它允许你将一个字典的内容展开为关键字参数传递给函数,或者将两个字典合并成一个新字典。# 作为关键字参数传递 def print_kwargs(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")my_dict = {'a': 1, 'b': 2} print_kwargs(**my_dict) # 输出: a: 1 b: 2# 合并字典 dict1 = {'a': 1, 'b': 2} dict2 = {'c': 3, 'd': 4} merged_dict = {**dict1, **dict2} print(merged_dict) # 输出: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
- 字典并集运算符,Python 3.9及以上版本
- 在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}
- 字典推导式
- 字典推导式是Python中的一种简洁且强大的语法,允许你快速创建新字典。它通常结合
for循环和条件语句使用,可以遍历一个序列或可迭代对象,并根据每个元素生成一个新的键值对。# 创建一个新字典,其中键是原字典的键,值是原字典值的平方 original_dict = {'a': 1, 'b': 2, 'c': 3} squared_dict = {k: v**2 for k, v in original_dict.items()} print(squared_dict) # 输出: {'a': 1, 'b': 4, 'c': 9}
- 字典推导式还可以包含条件,以过滤掉某些键值对:
# 创建一个新字典,只包含值大于1的键值对 original_dict = {'a': 1, 'b': 2, 'c': 3} filtered_dict = {k: v for k, v in original_dict.items() if v > 1} print(filtered_dict) # 输出: {'b': 2, 'c': 3}
- 获取字典长度
len()函数用于返回对象中项目的数量。当len()函数作用于字典(dict)时,它返回的是字典中键值对的数量,也就是字典的长度。# 创建一个字典 my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}# 使用len()函数获取字典的长度 dict_length = len(my_dict)# 打印字典的长度 print(dict_length) # 输出: 3
相关文章:
学习python的第十天之数据类型——dict字典
学习python的第十天之数据类型——dict字典 Python 中的字典(Dictionary)是一个非常强大的内置数据类型,它用来存储键值对(key-value pairs)信息。字典是无序的,这意味着它们不会记录你添加键值对的顺序&am…...
华为Mate 70临近上市:代理IP与抢购攻略
随着科技的飞速发展,智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中,华为一直以其卓越的技术和创新力引领着行业的发展。近日,华为Mate 70系列手机的发布会正式定档在11月26日,这一消息引发了众多科技爱…...
进程信号
目录 信号入门 1. 生活角度的信号 2. 技术应用角度的信号 3. 注意 4. 信号概念 5. 用kill -l命令可以察看系统定义的信号列表 6. 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 Core Dump 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异…...
RT-DETR融合GhostModel V3及相关改进思路
RT-DETR使用教程: RT-DETR使用教程 RT-DETR改进汇总贴:RT-DETR更新汇总贴 《GhostNetV3: Exploring the Training Strategies for Compact Models》 一、 模块介绍 论文链接:https://arxiv.org/pdf/2404.11202v1 代码链接:https:…...
JVM有哪些垃圾回收器
Serial垃圾回收器:单线程收集器,适用于客户端模式下的小型应用。 使用复制算法回收新生代,使用标记-整理算法回收老年代。 在进行垃圾回收时,会停止所有用户线程(Stop-The-World, STW)。Serial Old垃圾回收…...
EWM 打印
目录 1 简介 2 后台配置 3 主数据 4 业务操作 1 简介 打印即输出管理(output management)利用“条件表”那一套理论实现。而当打印跟 EWM 集成到一起时,也需要利用 PPF(Post Processing Framework)那一套理论。而…...
前端文件优化
一、图片优化 计算图片大小 对于一张100*100像素的图片来说,图像上有 10000 个像素点,如果每个像素的值是 RGBA 存储的话,那么也就是说每个像素有 4 个通道,每个通道 1 个字节(8 位 1个字 节)࿰…...
电脑怎么自动切换IP地址
在现代网络环境中,电脑自动切换IP地址的需求日益增多。无论是出于网络安全、隐私保护,还是为了绕过地域限制,自动切换IP地址都成为了许多用户关注的焦点。本文将详细介绍几种实现电脑自动切换IP地址的方法,以满足不同用户的需求。…...
hbase集成phoenix
1.环境 环境准备 三台节点zookeeper三节点hadoop三节点hbase三节点 2.pheonix集成 官网下载地址,需挂梯子,使用官网推荐的对应hbase版本即可 https://phoenix.apache.org/download.html下载及解压 wget https://dlcdn.apache.org/phoenix/phoenix-…...
单片机智能家居火灾环境安全检测
目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代社会,火灾安全始终是人们关注的重点问题。随着科技的不…...
Git_2024/11/16
文章目录 前言Git是什么核心概念工作流程常见术语解读Git的优势 Git与SVN对比SVNGit总结 Git配置流程及指令环境配置获取Git仓库本地初始化远程克隆 工作目录、暂存区、版本库文件的两种状态本地仓库操作远程仓库操作Git分支Git标签IntelliJ IDEA使用Git回滚代码 GitHub配置流程…...
Java基础夯实——2.1Java常见的线程创建方式
在 Java 中,线程是实现并发编程的核心。主要有以下三种: 继承 Thread 类实现 Runnable 接口实现 Callable 接口并结合 Future 使用 1. 继承 Thread 类 继承 Thread 类是创建线程的最简单方式之一。通过扩展 Thread 类并重写其 run 方法,可…...
【Docker容器】一、一文了解docker
1、什么是docker? 1.1 docker概念 Docker是一种容器化平台,通过使用容器技术,Docker允许开发人员将应用程序和其依赖项打包到一个独立的、可移植的容器中。每个容器具有自己的文件系统、环境变量和资源隔离,从而使应用程序可以在…...
Spring:IOC实例化对象bean的方式
对象已经能交给Spring的IOC容器来创建了,但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程,在这块内容中主要解决两部分内容,分别是 bean是如何创建的实例化bean的三种方式,构造方法,静态工厂和实例工厂 在讲解这…...
深入解析生成对抗网络(GAN)
1. 引言 背景介绍 在过去的几十年中,深度学习在计算机视觉、自然语言处理和语音识别等领域取得了巨大的突破。然而,如何让机器生成高质量、逼真的数据一直是人工智能领域的挑战。传统的生成模型,如变分自编码器(VAE)…...
curl命令提交大json
有个客户需要提交一个4M左右的pdf,接口里传的是pdf字节流base64编码后的字符串。 直接curl -XPOST -d json串 api接口会报 参数过长报错Argument list too long 网上搜了下解决方案把json串放到文本里然后通过json.txt引入参数 这一试不要紧,差点儿导致…...
以太坊拥堵扩展解决方案Arbitrum
Arbitrum是一种用于以太坊的Layer 2(L2)扩展解决方案,以下是详细介绍: 1. 背景和基本原理 背景介绍:随着以太坊网络的发展,交易拥堵和高Gas费用的问题逐渐凸显。为了解决这些问题,Layer 2扩展…...
Kafka新节点加入集群操作指南
一、环境准备 1. Java环境安装 # 安装JDK apt-get update apt-get install openjdk-8-jdk -y2. 下载并解压 wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.13-2.8.1.tgz tar xf kafka_2.13-2.8.1.tgz mv kafka_2.13-2.8.1 kafka二、配置环境变量 1. 创建kafka…...
【Android compose原创组件】在Compose里面实现内容不满一屏也可以触发边界阻尼效果的一种可用方法
创意背景 在安卓 View 传统命令式开发里面提供了非常多稳定美观体验好的组件,但是目前Compose还未有可用的组件,比如View中可以使用 coordinatorlayout 的滚动效果可以实现局部(即使内容不满一屏也可以触发滚动边界阻尼效果)&…...
介绍一下struct(c基础)
struct 是命名结构体的,可以看成集合。不同元素即是表达一个对象的不同方面属性。 格式 struct stu (一种标识符) { //命名不可初始化 [元素类型] 元素名; char 元素1[n]; int 元素2; int 元素3; __________ int 元素n; }; struct stu {//…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
