【python】—— 字典

目录

(一)什么是字典

(二)字典的基本操作

2.1 创建字典

 2.2 查找 key

 2.3 新增/修改元素

2.4 删除元素

2.5 遍历字典元素

 2.6 取出所有 key 和 value

(三)合法的 key 类型

 (四)小结


(一)什么是字典

Python字典是一种可变无序且可嵌套的数据类型,用于存储键值对。字典中的每个键(key)都唯一且不可变,它对应一个值(value)。

啥是键值对? 这是计算机/生活中一个非常广泛使用的概念:

  • 把 键(key) 和 值(value) 进行一个一对一的映射, 然后就可以根据键, 快速找到值.(底层相当于hash)

举个栗子:

  • 学校的每个同学, 都会有一个唯一的学号.
  • 知道了学号, 就能确定这个同学.
  • 此处 "学号" 就是 "", 这个 "同学" 就是 ""

此外字典的创建方式是使用花括号{},并使用冒号将键和值分隔开来。


(二)字典的基本操作

2.1 创建字典

可以通过以下方式创建一个字典:

  • 创建一个空的字典. 使用 { } 表示字典
a = { }     # 空字典
b = dict()  # 空字典

print(type(a))
print(type(b))

输出结果展示:


  • 也可以在创建的同时指定初始值,键值对之间使用 , 分割, 键和值之间使用 : 分割. (冒号后面推荐加一个空格).
student = { 'id': 1, 'name': 'zhangsan' } # 包含两个键值对的字典

print(student)

输出结果展示:


  • 为了代码更规范美观, 在创建字典的时候往往会把多个键值对, 分成多行来书写.
student = {
    'id': 1,
    'name': 'zhangsan'
}

  • 最后一个键值对, 后面可以写 , 也可以不写


  • 此外还可以使用参数来创建字典
student=dict(id=1,name='zhangsan') #左侧是键,右侧是值
print(student)

 输出结果展示:


  • 元组可以作为字典中的key来创建字典
t=(10,20,30)
print({t:10}) #t是key,10是value。元祖可以作为字典中的key

  输出结果展示:


  • 列表不可以创建字典 


 2.2 查找 key

  • 使用 in 可以判定 key 是否在 字典 中存在. 返回布尔值
     
student = {
    'id': 1,
    'name': 'zhangsan',
}
print('id' in student)
print('score' in student)

输出结果展示: 


  • 使用 [ ] 通过类似于取下标的方式, 获取到元素的值. 只不过此处的 "下标" 是 key. (可能是整数, 也可能是字符串等其他类型)
student = {
    'id': 1,
    'name': 'zhangsan',
}
print(student['id'])
print(student['name'])

输出结果展示:  


  • 如果 key 在字典中不存在, 则会抛出异常
student = {
    'id': 1,
    'name': 'zhangsan',
}

print(student['score'])

 输出结果展示:  


 2.3 新增/修改元素

使用 [ ] 可以根据 key 来新增/修改 value

  • 如果 key 不存在, 对取下标操作赋值, 即为新增键值对
student = {
    'id': 1,
    'name': 'zhangsan',
}
student['score'] = 90  # 添加键为'score',值为'90'的键值对
print(student)

 输出结果展示:   


  • 如果 key 已经存在, 对取下标操作赋值, 即为修改键值对的
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student)
student['score'] = 90  # 将score的值修改为90
print(student)

  输出结果展示:   


2.4 删除元素

  • 使用 pop 方法根据 key 删除对应的键值对
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student)
student.pop('score')  # 删除键为'score'的键值对
print(student)

  输出结果展示:   


  • 也可以使用del语句删除字典中的键值对 
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student)
del student['score'] # 删除键为'score'的键值对
print(student)

2.5 遍历字典元素

直接使用 for 循环能够获取到字典中的所有的 key, 进一步的就可以取出每个值了

student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}

# 遍历所有键
for key in student: 
    print(key)
# 遍历所有值
for value in student.values(): 
    print(value)
# 遍历所有键值对
for key, value in student.items():
    print(f'{key}: {value}')

 2.6 取出所有 key 和 value

  • 使用 keys 方法可以获取到字典中的所有的 key
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.keys())

  输出结果展示:  

  • 此处 dict_keys 是一个特殊的类型, 专门用来表示字典的所有 key. 大部分元组支持的操作对于dict_keys 同样适用.

  •  使用 values 方法可以获取到字典中的所有 value
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.values())

  输出结果展示:   

  • 此处 dict_values 也是一个特殊的类型, 和 dict_keys 类似.

  • 使用 items 方法可以获取到字典中所有的键值对
     
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.items())

  输出结果展示:    

  • 此处 dict_items 也是一个特殊的类型, 和 dict_keys 类似.

(三)合法的 key 类型

  • 首先不是所有的类型都可以作为字典的 key.
  • 字典本质上是一个 哈希表, 哈希表的 key 要求是 "可哈希的", 也就是可以计算出一个哈希值
  • 可以使用 hash 函数计算某个对象的哈希值.但凡能够计算出哈希值的类型, 都可以作为字典的 key
     


  • 列表无法计算哈希值


  • 字典也无法计算哈希值


 (四)小结

字典也是一个常用的结构. 字典的所有操作都是围绕 key 来展开的.需要表示 "键值对映射" 这种场景时就可以考虑使用字典.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/332410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VUE组件--动态组件、组件保持存活、异步组件

动态组件 有些场景可能会需要在多个组件之间进行来回切换&#xff0c;在vue中则使用<component :is"..."> 来实现组件间的来回切换 // App.vue <template><component :is"tabComponent"></component><button click"change…

登陆提示:不支持你所在的地区,“Openai’s services are not available in your country…”

错误 登陆时提示“openai’s services are not available in your country”&#xff0c; 说明&#xff1a;Openai的服务在你的地区不可用解决&#xff1a;先清理下浏览器缓存&#xff0c;然后更换代理节点&#xff0c;开启全局模式&#xff0c;最好用欧美节点&#xff0c;或…

hyperf 二十一 数据库 模型关系

教程&#xff1a;Hyperf 一 定义关联 根据文档 一对一&#xff1a;Model::hasOne(被关联模型&#xff0c;被关联模型外键&#xff0c;本模型被关联的字段)一对多&#xff1a;Model::hasMany(被关联模型&#xff0c;被关联模型外键&#xff0c;本模型被关联的字段)反向一对多…

Docker 安装 PHP

Docker 安装 PHP 安装 PHP 镜像 方法一、docker pull php 查找 Docker Hub 上的 php 镜像: 可以通过 Sort by 查看其他版本的 php&#xff0c;默认是最新版本 php:latest。 此外&#xff0c;我们还可以用 docker search php 命令来查看可用版本&#xff1a; runoobrunoob:…

【51单片机】数码管的静态与动态显示(含消影)

数码管在现实生活里是非常常见的设备&#xff0c;例如 这些数字的显示都是数码管的应用。 目录 静态数码管&#xff1a;器件介绍&#xff1a;数码管的使用&#xff1a;译码器的使用&#xff1a;缓冲器&#xff1a; 实现原理&#xff1a;完整代码&#xff1a; 动态数码管&#…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-热门帖子推荐显示实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

WAF攻防相关知识点总结1--信息收集中的WAF触发及解决方案

什么是WAF WAF可以通过对Web应用程序的流量进行过滤和监控&#xff0c;识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击&#xff0c;例如SQL注入、跨站点脚本攻击&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等&#xff0c;并采取相…

web前端项目-中国象棋【附源码】

中国象棋 【中国象棋】是一款历史悠久、深受人们喜爱的策略类游戏。在Web前端技术中&#xff0c;我们可以使用HTML、CSS和JavaScript等语言来制作一款中国象棋游戏。玩家使用棋子&#xff08;帅/相/士/炮/马/车/炮/卒&#xff09;在棋盘上相互对弈&#xff0c;将对手的“帅”棋…

python入门,函数的进阶

1.函数的多返回值 加上逗号&#xff0c;一个函数每次就能返回多个值 2.函数的多种参数使用形式 1.位置参数 调用函数时根据参数位置来传递参数 就是我们平时写函数时所使用的形式 注意&#xff1a; 传递的参数和定义的参数的顺序以及个数必须一致 2.关键字参数 通过键值…

【汉诺塔】经典递归问题(Java实现)图文并茂讲解

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&#…

Mysql 数据库DML 数据操作语言—— 对数据库表中的数据进行更改UPDATE 和删除DELETE

更改数据UPDATE UPDATE 表名&#xff08;注意这里不加TABLE&#xff09; SET 字段名1值1&#xff0c; 字段名2值2&#xff0c;...[where 条件] 示例1&#xff1a;只修改一个字段 示例二&#xff0c;修改name age字段 ; update tt4 set name 丹,age18 where id5;示例三、将所…

k8s---ingress对外服务(traefik)

目录 ingress的证书访问 traefik traefik的部署方式&#xff1a; deamonset deployment nginx-ingress与traefix-ingress相比较 nginx-ingress-controller ui访问 deployment部署 ingress的证书访问 ingress实现https代理访问: 需要证书和密钥 创建证书 密钥 secre…

Android WorkManager入门(二)

WorkManager入门 上一篇前言创建 WorkRequest并提交 定时的任务&#xff08;PeriodicWorkRequest&#xff09;配合约束使用定义执行范围失败后的重试为WorkRequest打上TAG其他取消方法 传参和返回参数总结参考资料 上一篇 Android WorkManager入门&#xff08;一&#xff09; …

【图解数据结构】深度解析时间复杂度与空间复杂度的典型问题

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;图解数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️上期回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5…

基于R语言的NDVI的Sen-MK趋势检验

本实验拟分析艾比湖地区2010年至2020年间的NDVI数据&#xff0c;数据从MODIS遥感影像中提取的NDVI值&#xff0c;在GEE遥感云平台上将影像数据下载下来。代码如下&#xff1a; import ee import geemap geemap.set_proxy(port7890)# 设置全局网络代理 Map geemap.Map()# 指定…

HCIP-7

IPV6: 为什么使用IPV6&#xff1a; V4地址数量不够V4使用NAT&#xff0c;破坏了端到端原则 IPV6的优点&#xff1a; 全球单播地址聚合性强&#xff08;IANA组织进行合理的分配&#xff09;多宿主----一个接口可以配置N个地址--且这些地址为同一级别自动配置---1&#xff09;…

绝地求生【违规处罚工作公示】1月8日-1月14日

1月8日至1月14日期间&#xff0c;共计对174,636个违规账号进行了封禁&#xff0c;其中164,757个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

Visual Studio 与 SQL Server 常见报错解决方案(工作向)

前言 这篇文章从今天创建开始&#xff0c;会一直更新下去&#xff0c;以后遇到常见但是比较容易解决的报错会在本文进行更新&#xff0c;有需要的朋友可以收藏再看 目录 Visual Studio lc.exe已退出&#xff0c;代码为-1无法导入以下密钥文件xxx.pfx&#xff0c;该密钥文件…

SG-9101CGA(汽车+125°C可编程晶体振荡器)

SG-9101CGA是用于汽车CMOS输出的可编程晶体振荡器&#xff0c;彩用2.5 x 2.0 (mm)封装&#xff0c;0.67 MHz至170 MHz频率范围、工作温度范围为-40℃~125℃&#xff0c;符合车规级晶振&#xff0c;无铅&#xff0c;绿色环保&#xff0c;满足汽车工业标准&#xff0c;电源电压范…

【音视频原理】图像相关概念 ② ( 帧率 | 常见帧率标准 | 码率 | 码率单位 )

文章目录 一、帧率1、帧率简介2、常见帧率标准3、帧率 刷新率 二、码率1、码率简介2、码率单位 一、帧率 1、帧率简介 帧率 Frame Rate , 帧 指的是 是 画面帧 , 帧率 是 画面帧 的 速率 ; 帧率 的 单位是 FPS , Frames Per Second , 是 每秒钟 的 画面帧 个数 ; 帧率 是 动画…