Python基础——字典
Posted 薛定谔的猫ovo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础——字典相关的知识,希望对你有一定的参考价值。
文章目录
前言
字典是Python中唯一的映射类型,映射是指两个元素之间元素相互对应的关系。
映射类型区别于序列类型,序列类型以数组的形式存储,通过索引的方式来获取相应位置的值,一般索引值与对应位置存储的数据是毫无关系的:
列表brand、slogan的索引和相对的值是没有任何关系的,唯一有联系的就是两个列表间,索引号相同的元素是有关系,所以这里通过brand.index(“耐克”)这样的语句,间接实现通过品牌查找对应的口号的功能。这样实现比较麻烦而且效率不高,所以需要有字典这种映射类型的出现。
创建和访问字典
先简单演示一下用法:
字典的使用非常简单,它有自己的标志性符号,就是用大括号()定义。
字典由多个键(Key)及其对应的值(Value) 共同构成,每一对键值组合称为项。
在上面的例子中,“李宁”, “耐克”, “阿迪达斯"就是键,而"一切皆有可能”, “Just do it”, "Impossible is nothing"就是对应的值。
需要注意的是:字典的键必须独一无二,而值可以是任何数据类型,但必须是不可变的(如字符串、数或元组)。
此外,字典跟序列不同,序列讲究顺序,字典讲究映射,不讲究顺序。
声明一个空字典
要声明一个空字典,直接用个大括号即可。
创建字典
1、可以用dict()来创建字典。
注意到,上面有好几层括号,因为dict()函数的参数可以是一个序列(但不能是多个),所以要打包成一个元组序列(列表也可以)。
2、此外,还可以通过提供具有映射关系的参数来创建字典:
这里要注意的是:键的位置不能加上字符串的引号,否则会报错。
3、还有一种创建方法:直接给字典的键赋值,如果键存在,则改写键对应的值,如果不存在,则创建一个新的键并赋值。
殊途同归,下面列举的几种方法都是创建同样的字典:
这也再一次说明了,字典是讲究映射,不讲究顺序的。
各种内置方法
1、fromkeys()
fromkeys()方法用于创建并返回一个新的字典,它有两个参数:第一个参数是字典的键,第二个参数是可选的,是传入键对应的值。如果不提供,那么默认值是None。
可以注意到,最后一个例子并不是像我们想的那样,将值“one”、“two”和“three”分别赋值键1、2和3,因为fromkeys()把(“one”, “two”, “three”)当成一个值了。
2、keys()、values()和items()
访问字典的方法有keys()、values()和items()。
- keys()用于返回字典中的键
- values()用于返回字典中所有的值
- items()用于返回字典中所有的键值对(项)
有时候,我们并不知道提供的项在字典中是否存在,如果不存在,Python就会报错:
3、get()
get()方法提供了更宽松的方式去访问字典项,当键不存在的时候,get()方法并不会报错,只是会返回一个None,表示什么都没找到:
如果找不到数据时返回指定的值,那么可以在第二个参数设置对应的默认返回值:
不知道一个键是否在字典中,那么可以使用成员关系操作符(in或not in)来判断:
在字典中检查键的成员资格比序列更高效,当数据规模相当大的时候,两者的差距会很明显:因为字典是采用哈希的方法一对一找到成员,而序列则是采取迭代的方法逐个对比。
最后需要注意的是,这里查找的是键而不是值,但在序列中查找的是元素的值而不是元素的索引。
4、clear()
如果需要清空一个字典,则使用clear()方法:
有的读者可能会使用变量名赋值为一个空字典的方法来清空字典,这样做存在一定的弊端。举个例子:
从上面的例子可以看出,a和b指向同一个字典,然后试图通过将a重新指向一个空字典来达到清空的效果时,我们发现原来的字典并没有被真正清空,只是a指向了一个新的空字典而已。所以这种做法在一定条件下会留下安全隐患。故应该使用clear()来清空字典:
5、copy()
copy()方法是复制字典。
6、pop()和popitem()
pop()是给定键弹出对应的值,而popitem()是弹出一个项(键值对)。
7、setdefault()
setdefault()方法和get()方法有点相似,但是setdefault()在字典中找不到相应的键时会自动添加。
8、update()
update()方法用来更新字典。
以上是关于Python基础——字典的主要内容,如果未能解决你的问题,请参考以下文章
python基础 filter ,列表,字典,集合 中根据 条件 筛选 数据
python 学习笔记day05-python字典和集合条件和循环文件和输入输出