当前位置: 首页 > news >正文

python中字典的创建

1.字典的概念

字典是一种存储键值对的结构。

在python中能够根据键(key)来快速找到值(value)

根据key能够快速的找到value(一对一的映射关系)

在python的字典中,可以同时包含很多个键值对,同时要求这些键,不能重复。

2.创建字典

如上图所示,是a = {} 或者b = dict()这两种方式都可以去创建字典。

如上图所示,不是所有的数据类型都可以作为key,但是对于作为value的数据类型确实没有约束的。

使用英文逗号来分隔每一组的键值对,

在key的后面要用英文冒号来分隔value

英文逗号来分隔不同键值对,

冒号来分隔键和值,

3.在字典中查找key

1.使用in来判断key是否在字典中存在,并且返回布尔值。

因为in只是判断key是否在字典中存在,而和value无关,所以即使in所查找的值在字典中的value中存在,也只会返回False。

如上图所示,可以使用in来判断所查找内容在字典的key中是否存在,可以使用not in来判断key在字典中是否不存在。

2.可以使用[ ] 来根据key 获取到value

如上图所示,print(a[key])

这样的方式就可以获取到元组a中key所对应的value值。

如上图所示,KeyError表示当前查找的key在字典中是不存在的,

对于字典来说,使用in或者[ ]来获取value,都是非常高效的操作!

对于列表来说,使用in比较低效的,而使用[ ] 是比较高效的~

对于字典来说[key ]来获取value,使用了特殊的数据结构:哈希表

对于列表来说,使用[ ] 来获取元素类似于使用了类似于数组/顺序表取下标

对于列表来说,使用in比较低效的,因为需要把整个列表遍历一遍,

4.关于字典中的新增元素和修改元素操作

1.在字典中新增元素,使用[ ]来进行。

如上图所示,print(a['calssId']),当进行对字典的一个读取操作时,如果字典中没有相应的key,就会返回keyerror的操作,

如上图所示,a['score'] = 90 ,这个操作是对字典a中,添加一个key=score,value=90

2.在字典中根据已经存在的key修改value,

如果在字典a中根据已经存在key了,那么a[ 已经存在的key] = 新的value

这样的操作就是在修改已经存在的key的value值。

如果key不存在,往里写入,相当于新增键值对,

如果key不存在,往里写入,则相当于根据key修改value。

这里就和前面说的变量创建,是类似的~

a= 10#a当前不存在,这就是定义变量(创建新变量)

a = 20#a当前已经存在了,这里就是修改变量~

4.在python中删除一个键值对

字典的各种操作,就是针对key来进行的!

新增,删除,获取value,修改value

使用pop方法,根据key来删除键值对~

即字典名称.pop(key名称)

5. 理解字典操作的效率

这里常数级的意思是无论字典中有多少元素~

新增,修改,查找,删除,操作都是固定时间,不会因为元素多了,操作就慢了,

字典中的key要求不能重复。

6.字典的遍历

直接使用for循环来遍历字典

如上图所示,可以使用for循环来遍历字典,for key in 字典名称:print (key,a[key]) 

来实现key和value的配对输出

keys()获取到字典中的所有key

values()获取到字典中的所有values

items()获取到字典中的所有键值对。

print(a.keys())

如上图所示,是利用for key,value in a.items():

                                    print(key,value)

7.可哈希的类型

在python语言中列表和字典是不可哈希的,所以就不能作为字典的key

而元组等数据类型是可以哈希的,所以就能作为字典的key

一般认为在python中可变的对象,一般是不可以哈希的,而不可变的对象,一般是可哈希的。

而且在python中专门提供了一个函数hash,来计算一个数据的哈希值。

字典,列表,元组python语言中非常常用的内置类型!相比于int,str,float

他们内部可以再包含其他元素了,这就相当于容器类/集合类结构。

相关文章:

  • Spring AI 第二讲 之 Chat Model API 第九节 watsonx.ai Chat
  • 微生物实验室建设公司独家分享:从平面布局到高效设备的全流程设计技巧
  • YOLOV5总结
  • C++基础编程100题-009 OpenJudge-1.3-07 计算多项式的值
  • 协程-在单个线程内部执行
  • 为什么要分析电商用户数据?详解两大用户数据分析维度
  • 华为云DDoS攻击下的应对策略
  • Spring Cloud Gateway详解
  • BIO NIO AIO 的区别!!!
  • 【Oracle生产运维】表空间利用率不足处理
  • RabbitMQ-工作模式(Topics模式RPC模式Publisher Confirms模式)
  • docker使用auth登录
  • LeetCode | 26.删除有序数组中的重复项
  • 【深度学习】深度学习之巅:在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境
  • 【问题解决】HttpURLConnection如何以POST的方式发送请求,传递form表单格式的数据到外部接口
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • crontab执行失败的多种原因
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • interface和setter,getter
  • leetcode讲解--894. All Possible Full Binary Trees
  • Map集合、散列表、红黑树介绍
  • Median of Two Sorted Arrays
  • Vue2.0 实现互斥
  • vue-router 实现分析
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 给初学者:JavaScript 中数组操作注意点
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 日剧·日综资源集合(建议收藏)
  • 一个项目push到多个远程Git仓库
  • 源码安装memcached和php memcache扩展
  • Semaphore
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (arch)linux 转换文件编码格式
  • (pojstep1.3.1)1017(构造法模拟)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (ZT)一个美国文科博士的YardLife
  • (笔试题)合法字符串
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十六)Flask之蓝图
  • (四)linux文件内容查看
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET4.0并行计算技术基础(1)
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】