小甲鱼——字典

字典是ipython当中唯一实现映射关系的内置类型。

映射关系:就是一一对应

y = {"吕布":"口口布","关羽":"关习习"}
type(y)
<class 'dict'>

这个就是一个字典,我们将冒号左边的就称之为字典的“键”,冒号右边的就是字典的值,

与序列不同的是,序列是通过位置的偏移来存取数据的,而字典是通过键来实现写入和读取的,

在字典中,只要我们提供键就可以获取其对应的值,方法与序列类似

y["吕布"]这段代码的返回值就是   "口口布"

我们可以通过指定一个不存在于字典中的“键”来创建一个新的键值对,

y["刘备"] = "刘baby"那么这段代码的返回值就是:
{'吕布':'口口布','关羽':'关习习','刘备':'刘baby'}

进行字典的深度讲解:

一.创建字典:

1.直接使用大括号或者冒号组合,将映射关系展现出来。

 a = {'吕布':'口口布','关羽':'关习习','刘备':'刘baby'}

2.使用dict()函数,这个函数,它是用来生成字典的,它的每个参数,都是一个对应的键值对,键与值之间,直接使用等号进行挂钩

b = dict(吕布 = "口口布",关羽 = "关习习",刘备 = "刘baby")

#注意#  这种写法不能在键上面添加引号。

3.使用列表作为参数,列表当中的每个元素是使用元组包裹起来的键值对。

c = dict([("吕布","口口布"),("关羽","关习习"),("刘备","刘baby")])

4.就是将第一种方法作为参数传递给dict

d = dict({'吕布':'口口布','关羽':'关习习','刘备':'刘baby'})

5.前面跟第四种是一样的,后面又不太一样

e = dict({'吕布':'口口布','关羽':'关习习'},刘备 = "刘baby")

6.zip()函数,它的作用就是:创建一个聚合多个可迭代对象的迭代器,那么他也是可以作为参数传递给dict()函数,

f = dict(zip(["吕布","关羽","刘备"],["口口布","关习习","刘baby"]))

那么其实这六种他们是等价的

二.增

1.fromkeys(iterable[,values])

它可以使用iterable参数,指定的可迭代对象来创建一个新的字典,并将所有的值初始化为values参数指定的值

d = dict.fromkeys("Fish",250)这段代码的返回值就是:
{'F':250,'i':250,'s':250,'h':250}

现在d就是存放四组映射关系的一个字典。他对于快速初始化一个字典是非常有效果的。

如果需要修改某个键的值,我们可以这么做

d['F'] = 70那么这段代码的返回值就是
{'F':70,'i':250,'s':250,'h':250}

这个F的值就改过来了。

如果在字典中找不到对应的键,同样的操作就会变成增加一个键值对,

d['c'] = 67这段代码的返回值就是:
{'F':70,'i':250,'s':250,'h':250,'c':67}

序列和字典的另一个重大区别:就是序列中元素可以是重复的,而字典中的项也就是我们说的键值对,它一个键就是对应一个值,并不会存在重复的键。如果重复了,就用新的值去覆盖旧的值。

2.删

删除字典中指定的元素,我们可以使用pop方法,

{'F':70,'i':250,'s':250,'h':250,'c':67}d.pop('s')这段代码返回的值就是:250  就是指定的键对应的值我们看一下d 
d的返回值就是:
{'F':70,'i':250,'h':250,'c':67}
此时s就已经不见了

但是,如果pop一个不存在的键,就会抛出异常

d.pop("狗")   例如,你去抛出”狗“,但是里面本来就没有狗,此时就会抛出异常,但是如果你想让python不这么偏激,你可以给他指定一个这个default参数

d.pop("狗","没有")它的返回值就是'没有'
那么在没有的时候,他就会返回我们指定的这个内容就是"没有"

与pop方法类似的还有popitem

它的作用就是,删除最后一个假如字典的键值对,因为在python3.7之后,他就把字典变成有序的了,但是呢,咱们开发的时候一定要记住,并不是所有去执行你这个源代码的这个编译器,它都是python3.7之后的,

{'F':70,'i':250,'s':250,'h':250,'c':67}
d.popitem()
('c',67)#这样就是将最后一个键值对弹出此时的d就是
{'F':70,'i':250,'h':250}

del也可以删除一个指定的键值对

del d['i']d{'F':70,'h':250}

这样就是把i也删掉了

当然,del也可以直接加上字典的名字,把整个字典给干掉

最后,如果我们希望清空字典的内容,我们可以使用clear()方法

d = dict.fromkeys("FishC",250)
d
{'F':250,'i':250,'s':250,'h':250,'c':250}
d.clear()
d
{}

那么此时d就变成了一个空字典。

3.改

只需要指定一个存在于字典中的键,就可以修改其对应的值

d = dict.fromkeys("FishC")  #先使用fromkeys去生成一个字典d{'F':None,'i':None,'s':None,'h':None,'C':None}  #那么一般情况下,他们的返回值就是None#现在我们修改一下's'这个键的值d['s'] = 115d{'F':None,'i':None,'s':115,'h':None,'C':None} 

但是如果我们想同时修改多个键值对,我们可以使用字典的update()方法

它可以支持你,同时给它传入多个键值对,,也可以直接给他传入另一个字典,或者一个包含键值对的可迭代对象,

d.update({'i':105,'h':104})#传入另外一个字典对他进行覆盖
d
{'F':None,'i':None,'s':105,'h':104,'C':None} 
#这个时候这个's','h'就直接更新上去了,还可以这么写:d.update(F = '70',C = '67')d{'F':70,'i':105,'s':115,'h':104,'C':67} 

二.查

最简单的办法 

d['c']'67'

如果我指定的键不在字典中,就会报错,有些时候会被认为是用户体验不佳的表现,所以更好的办法是使用get()方法

get(key[,default])

这个它可以存入一个default方法,指定,当找不到键的时候返回的值

d.get('c',"这里没有c")   #查找c这段代码的返回值就是:‘这里没有c’,不会报错

当我们需要查找一个键是否存在于字典当中时,如果在,返回对应的值,如果不在,就给它一个新的值,那么这个时候我们可以使用一个叫做,setdefault()的方法,

d.setdefault('C',"code")   #查找大写字母C这个键  字典中是存在这个键的,所以后面输入的code并没有用
所以我们这段代码的返回值依旧是  '67'd.setdefault('c',"code")   #查找小写字母c这个键  字典中是不存在这个键的那么这段代码就会返回 "code"#这时候我们将字典打印出来,会发现,字典发生了变化
d{'F':'70','i':'105','h':'104','C':'67','c':'code'}

三.    items(),keys(),values()

三个方法分别用于获取字典的键值对,键和值三者的视图对象

什么是视图对象:

视图对象即字典的动态视图,这就意味者当字典内容发生变化的时候,试图对象的内容也会相应地跟着改变。举个例子:

#创建三个视图对象
keys = d.keys()  #创建的是这个字典的键的视图对象values = d.values()   #创建的是这个字典的值的视图对象items = d.items()itemsdict_items([('F',70),('i',105),('s',115),('h',104),('C','67'),('c','code')])keys
dict_keys(['F','i','s','h','C','c'])valuesdict_values['70',105,115,104,'67','code']上面是我创建的三个视图对象,视图对象就是我们字典的内容发生改变的时候,他们三者也会改变,我们现在修改字典的内容d.pop('c')   #把  c剔除出去'code'
将字典打印出来,发现他改变了
d{'F':'70','i':'105','h':'104','C':'67'}items   #改变了dict_items([('F',70),('i',105),('s',115),('h',104),('C','67')])keys
dict_keys(['F','i','s','h',''C])values   #改变了['70',105,115,104,'67']

字典为了实现浅拷贝,字典和序列一样,使用从copy方法

e = d.copy()
e这段代码的返回值就是:
{'F':'70','i':105,'s':115,'h':104 'C':'67'}

四.内置函数

1.len()

这个内置函数可以获取字典中键值对的数量,

{'F':'70','i':105,'s':115,'h':104 'C':'67'}len(d)5

2.  in    not in 

判断某个键是否存在于字典中

'C'in d
True
'c' not in d 
True

3.字典转换成列表  list(d)

list(d)['F','i','s','h','C']   #这个时候得到的是字典中所有的键构成的列表相当于‘list(d.keys())’#如果要得到所有值,应该使用的是什么list(d.values())
['70',105,115,104,'67']

4.iter()函数

它的作用是将字典的键构成一个迭代器,

e = iter(d)
next(e)
'F'
next(e)
'i'
next(e)
's'
next(e)
'h'
next(e)
'C'

迭代器他只能走一遍,数到最后就会出现一个异常

5,python3.8版本之后,我们可以使用reversed()函数,对字典内部的键值对进行逆向操作。

在之前的版本python因为它的字典的顺序是得不到保障的,所以我们不能使用reverse方法

因为无序,就无所谓的逆向排序,

list(reversed(d.values()))['67',104,115,105,'70']d = {"吕布":{"语文":60,"数学":70,"英语":80},"关羽":{"语文":80,"数学":90,"英语":70}}d
{"吕布":{"语文":60,"数学":70,"英语":80},"关羽":{"语文":80,"数学":90,"英语":70}}这个时候要是想要获取吕布的成绩,就需要做两次索引
d["吕布"]["数学"]
70   #得到的就是70分

 嵌套也可以嵌套一个序列:


d = {"吕布":[60,70,80],"关羽":[80,90,70]#那么第二次索引我们应该相应的换成下标索引值d["吕布"][1]
70

五.字典推导式

d = {'F':70,'i':105,'s':115,'h':104,'C':67}
b = {v:k for k,v in d.items()}
b 
{70:'F',105:'i',115:'s',104:'h',67:'C'}
#这样子就把他们的顺序调换过来了
也可以加上筛选
c = {v:k for k,v in d.items()if v > 100}
c
{105:'i',115:'5',104:'h'}
#两个小于100的就不见了

利用字典推导式,可以利用python求出字符串的编码值

d = {x:ord(x) for x in "FishC"}d{'F':70,'i':105,'s':115,'h':104,'C':67}

容易出错的地方:

d = {x:y for x in [1,3,5] for y in [2,4,6]}d
{1:6,3:6,5:6}

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

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

相关文章

FineReport

1.FineReport 官网 &#xff1a;FineReport产品简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 下载地址 免费下载FineReport - FineReport报表官网 FineReport是一款用于报表制作&#xff0c;分析和展示的工具。 普通模板&#xff1a;是 FineReport 最常用&#xf…

关于glibc-all-in-one下载libc2.35以上报错问题

./download libc版本 下载2.35时报错&#xff1a;原因是缺少解压工具zstd sudo apt-get install zstd 下载后重新输命令就可以了 附加xclibc命令 xclibc -x ./pwn ./libc-版本 ldd pwn文件 xclibc -c libc版本

【嵌入式】适配大多数STM32的最小系统设计

大多数的参赛作品以及毕业设计中都仅仅简单的使用STM32F103最小系统板加上洞洞板或面包板。这样的设计虽然可以进行功能演示&#xff0c;但是由于市面上的最小系统板太过简单&#xff0c;并没有发挥出STM32系列MCU的强大功能&#xff0c;而且看起来很不美观&#xff0c;为了在参…

PHP基础语法【上】

文章目录 一、环境安装二、代码应该写在哪里&#xff1f;三、什么是错误&#xff1f;四、变量无需声明变量变量命名规则变量的作用域可变变量 五、常量常量的定义常量的特性 六、数据类型NULL 空值Boolean 布尔类型Integer 整型Float 浮点型String 字符串Array 数组Object 对象…

【SkiaSharp绘图05】SKPaint详解(三)之ImageFilter(颜色、组合、膨胀、移位、光照、反射、阴影、腐蚀、变换)

文章目录 ImageFilterCreateColorFilter 颜色滤镜CreateCompose 滤镜组合CreateDilate 膨胀滤镜CreateDisplacementMapEffect 移位映射CreateDistantLitDiffuse 光照CreateDistantLitSpecular 反射光照CreateDropShadow阴影效果CreateDropShadowOnly 只阴影效果CreateErode腐蚀…

Python热涨落流体力学求解算法和英伟达人工智能核评估模型

&#x1f3af;要点 &#x1f3af;平流扩散简单离散微分算子 | &#x1f3af;相场模拟&#xff1a;简单旋节线分解、枝晶凝固的 | &#x1f3af;求解二维波动方程&#xff0c;离散化时间导数 &#x1f3af;英伟达 A100 人工智能核性能评估模型 | &#x1f3af;热涨落流体动力学…

【无重复字符的最长子串】

无重复字符的最长字串 一、题目二、解决方法1.暴力解法2.滑动窗口哈希 三、总结1.es6 new set()的用法添加元素add()删除元素delete()判断元素是否存在has 2.滑动窗口和双指针的联系和特点 一、题目 二、解决方法 1.暴力解法 解题思路&#xff1a;使用两层循环逐个生成子字符串…

VMware软件的安装与安装Win10系统

上一篇写了&#xff08;虚拟机&#xff09;VMware软件的安装及Ubuntu系统安装&#xff0c;这次续上部分&#xff0c;安装完Ubuntu系统后&#xff0c;又安装了win10&#xff0c;也记录一下。 事前准备好win10镜像文件&#xff0c;可在微软官网下载 入口地址&#xff1a;软件下…

深入学习Java `synchronized` 关键字

深入学习Java synchronized 关键字 synchronized关键字通过确保在同一时间只有一个线程可以执行某个代码块&#xff0c;从而防止多个线程同时访问共享资源时发生数据不一致的问题。 修饰方法 当synchronized用于修饰实例方法时&#xff0c;表示当前实例对象是同步锁。这意味…

全球首个开源类Sora模型大升级,16秒720p画质电影感爆棚!代码和权重全面开源!

目录 01 视频界开源战士 02 深度解码技术 03 打破闭环&#xff0c;开源赋能 潞晨Open-Sora团队刚刚在720p高清文生视频质量和生成时长上实现了突破性进展&#xff01; 全新升级的Open-Sora不仅支持无缝生成任意风格的高质量短片&#xff0c;更令人惊喜的是&#xff0c;团队选…

[每日一练]update和case-when语句联合实现条件更新

该题目来源于力扣&#xff1a;. 627. 变更性别 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; Salary 表&#xff1a;----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar |…

electron录制-镜头缩放、移动

要求 1、当录屏过程中,鼠标点击,镜头应该往点击处拉近,等一段时间还原 2、录屏过程中,可能会发生多次点击,但是点击位置偏差大,可能会导致缩放之后,画面没出来,因此需要移动镜头帧 效果如下 electron录制-镜头缩放 实现思路 1、监听鼠标点击、键盘按下事件 2、对以上…

【windows|002】WEB服务和域名介绍

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

【算法与设计】期末总结

文章目录 第一章 概述算法与程序时间复杂性求上界 第二章 递归与分治双递归函数——Ackerman函数分治策略大整数乘法两位两位四位x四位 三位x三位两位x六位 第三章 动态规划矩阵连乘基本要素最优子结构子问题重叠 备忘录 第四章 贪心算法活动安排问题基本要素贪心选择性质最优子…

pg表空间和mysql表空间的区别

一、表空间的定义 1、在pg中表空间实际上是为表指定一个存储的目录。并且在创建数据库时可以为数据库指定默认的表空间。创建表和索引时可以指定表空间&#xff0c;这样表和索引就可以存储到表空间对应的目录下了。 在pg中一个库中可以有多个表空间&#xff0c;一个表空间可以…

6月17(信息差)

1.马斯克最新预测&#xff1a;未来不再需要手机 将被脑机芯片替代 当地时间6月17日&#xff0c;马斯克高仿号“Not Elon Musk”发帖称&#xff1a;“你会在你的大脑上安装一个Neuralink接口&#xff0c;让你通过思考来控制你的新X手机吗&#xff1f;”对此&#xff0c;马斯克本…

yolov10--C#接口

一、前言 本章主要讲解yolov10的C#接口&#xff0c;主要是使用微软开发的openvinocsharp工具加载yolov10模型&#xff0c;并做推理。 二、yolov10模型转换 这里为了演示&#xff0c;使用官方yolov10m模型&#xff08;其他大小的模型同理&#xff09;做演示&#xff0c;可从下方…

游戏服务器研究一:bigworld 开源代码的编译与运行

1. 前言 bigworld 已经开源了它的代码&#xff0c;而我对于大世界的 scale 很感兴趣&#xff0c;所以就尝试把代码跑起来研究。但是&#xff0c;整个过程比我原先预想的复杂得多。 虽然能找到一些官方的帮助文档&#xff0c;但这些文档要么过旧&#xff0c;要么过于详尽&…

【护眼知识】护眼台灯真的有用吗?带你看台灯怎么选对眼睛好

在数字化时代&#xff0c;我们的眼睛无疑承受着前所未有的压力。无论是长时间盯着电脑屏幕&#xff0c;还是沉浸在书本的海洋中&#xff0c;眼睛的健康都成为了我们不容忽视的问题。中国现有约500万盲人&#xff0c;占总人口的0.4%&#xff0c;是世界上盲和视力损伤严重的国家之…

浏览器加速播放视频技巧

当我们看网页中的视频时&#xff0c;想加速播放&#xff0c;但是选项最高只能2倍速时&#xff0c;还想再加快播放如何操作&#xff1f; 此时我们可以按F12打开浏览器开发者选项&#xff0c;然后点击控制台&#xff0c;在浏览器输入如下代码&#xff1a; document.querySelecto…