六、Python的字典

字典

1、为什么需要字典

在这里插入图片描述
将姓名放在一个列表中,将对应的电话放在另外一个列表里,然后根据查找姓名得到的索引,来找对应电话号码列表里的元素,这是以前我们查找某人电话号码的方式。
现在姓名和电话号码存储在两个列表中,但是,我希望查找某人的电话号码的过程,最好是把姓名和电话号码都存储在一个数据结构中。
使用字典就可以实现,字典是用花括号来表示的。
在这里插入图片描述

2、什么是字典

在这里插入图片描述
在这里插入图片描述
大家看下这张字典的示意图,首先字典的第一个特点是:它的所有元素都是一个key-value对,key代表键,value代表值,通过指定的key总能映射到唯一确定的value。
大家注意一点啊,字典中不可以存在重复的key,这个key是不能重复的,但是可以存在重复的value。
字典中的这个key必须是不可变对象,当我们存取字典中的key-value对时,系统会调用内置函数hash,这个函数会根据指定的key计算出value的存储位置,比如说在上图中每个格子的上面我调用了内置函数hash,传入的参数时key,这个内置函数hash就会根据指定的key计算出value的存储位置,这个存储位置也就是哈希值,对于指定的key,为了保证每次计算出的哈希值都是相同的,我们要求这个key它必须是不可变对象,也就是说只有不可变对象才存在哈希值。
如果这个key是个可变对象的话,那么我们就无法保证每次计算出来的存储位置都是相同的,这样的话我存进去了可能会取不出来了,这样是不行的。
在这里插入图片描述
这些特点大家可能暂时记不住,随着后面课程的讲解,我们会分别应用这些字典的特点,并且会举些例子,把这些字典的特点体现出来。在掌握这些特点的时候,大家可以结合上面的示意图进行理解和记忆。

3、字典的创建

在这里插入图片描述
我还可以给dict这个类的构造函数传入一个列表,列表中的每个元素都是一个元组,每个元组都由两个元素组成,一个是键,一个是值。
在这里插入图片描述
我还可以传入一个zip对象,这个zip内置函数它用于将多个可迭代的对象进行打包压缩,range(3)代表的是0,1,2这三个数组成的整数序列,'ABC’是一个字符串,所以key和value的映射关系变成了:{0: ‘A’, 1: ‘B’, 2: ‘C’}

所以呢字典的创建比较灵活,大家可以根据需要选取不同的方式来创建字典。

在这里插入图片描述
如果我知道了一系列key,还可以调用类dict的方法fromtkeys来创建字典。
所有的key我都放在一个列表中,我也可以把所有的key放在元组中。

默认情况下,所有value的默认值都是None,我也可以通过参数来指定所有value的值。
在这里插入图片描述

4、字典的查操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此外呢,在我们调用get方法的时候,我们可以通过参数设置默认的value,以便在字典中不存在指定的key的时候,将这个默认的value进行返回。

显然呢,使用中括号的方式相对简单一些,但是当我们调用方法的时候,更加的灵活,而且容错性更加的高。

字典d中是否存在指定的键’age’呢?
在这里插入图片描述

5、字典的改操作

在这里插入图片描述
在这里插入图片描述
如上图所示,还可以给方法update传入一个由元组组成的列表,这个列表中的元素都是元组。

还可以:
在这里插入图片描述

6、字典的增操作

如果我们想要往字典中添加key-value对,那么必须要满足的前提条件之一,就是我们要添加的key-value对中的key在字典中是不存在的,否则就变成了修改字典中指定key的value了。
在这里插入图片描述

  • 如果我们想在程序中往字典中添加key-value对,那么该如何实现呢?

在这里插入图片描述

  • update函数的传入参数可以是好几种形式:

在这里插入图片描述

  • 传入的参数可以是字典的形式;
  • 传入的参数还可以是一个元组的列表,也就是说列表中的元素都是元组,每个元组都有两个元素组成,一个是key,一个是value;
  • 传入的参数还可以是关键字参数的形式。

这两种方式跟我们上节课在讲字典的改操作的时候,那两种方式非常的类似,大家可以跟上节课结合对比着来学习,尤其是第2种方式,都是调用了方法update。

7、字典的删操作

在这里插入图片描述
在这里插入图片描述
当指定的key不存在的时候,就会返回我们指定的这个value,并没有抛出KeyError。

在这里插入图片描述
大家注意啊,在调用popitem的时候,我并没有指定我要删除的key-value对的key,那这样的话,它删除的是哪个key-value对呢?我们运行一下程序:
那是因为这个方法它删除的是任意一个key-value对,因为字典中的key-value对是没有顺序的,而调用这个方法的时候呢,我又没有指定任何的一些信息,所以这个方法只能删除一个任意的key-value对。
在这里插入图片描述

8、为字典中指定的key设置默认的value值

很多时候我们可能无法确定字典中是否存在某个key,我们为了确保字典中我们指定的key总是存在的,Python给我们提供了一个方法叫setdefault,通过这个方法呢可以给我们带来很多好处。
这个时候呢调用方法setdefault,它就相当于是一个if语句的判断,即相当于是 if…not in…。
在这里插入图片描述
在这里插入图片描述

9、字典的视图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在我们写程序的时候,很多时候都会访问字典的这3个视图,在访问这个3个视图的时候呢,大家一定要注意视图的这个特点:视图会随字典的变化而随之变化。

9、借助字典创建格式化字符串

在前面的课程中,讲解了创建格式化字符串的3种方式,分别是使用百分号%作为占位符,使用花括号{}作为占位符,使用美元符$作为占位符。
对于使用百分号和使用花括号作为占位符,我们还可以借助字典来创建格式化字符串。

  • 使用百分号作为占位符

在这里插入图片描述
不知道大家有没有注意到,上图这两个实际值全都来自字典的value,这个时候我们就可以把所有的实际值全部改写成字典:
在这里插入图片描述
为了帮助大家更好的理解这个例子,请看下图:
在这里插入图片描述
上面是我们采用之前的知识来创建的这个格式化字符串,%s都是占位符,有两个占位符,传入的是一个实际值的元组,通过key得到字典的value,然后把实际值替换掉占位符。
我们再来看上图下面的这种方式,借助字典来创建格式化字符串,王五和张三都是字典的key,我们将它们都放在小括号中,然后放在占位符%的后面,这样整体的这部分 %(王五)s 就作为了占位符,而且我们把之前的这两个实际值(上图绿色虚线箭头)整体替换为了字典,这样呢到时候就用字典的key张三它所对应的value来替换掉张三这部分所对应的占位符 %(张三)s ,用字典的key王五它所对应的value来替换掉王五这部分所对应的占位符 %(王五)s 。

  • 使用花括号作为占位符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值