哈啰!大家好,今天是初五了,牛年接财神的好日子,懂得都懂。祝@所有人2021年,事事顺利,牛气冲天,福利满满,财运亨通,步步高升,学业进步!
那么,这次介绍的是鼎鼎大名的字典,其以其操作的灵活性、操作的复杂度接近于列表而广受欢迎,其应用在诸如学生档案管理、json数据库、Vscode代码idle应用的配置文件里等一些应用场景里,其应用范围非常广。
首先,来说下,字典的定义:英文全称dictionary,简写为dict,是一种可变的无序2集合,同时是一种以键值对的形式作为元素存储各种数据类型的集合。使用花括号'{}'来创建一个字典。注意哦,是成对出现,不能拆开啊!
同时,我也说下集合,既然提到是归于集合了,那么顺带就介绍下。集合,我们在学生时代就学习过了,现在在回顾下, 集合的定义。
定义:由不同元素组成的集合,集合是一组无序排列 可hash值,可作为字典的key。
特性:集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算,无须纠结于集
合中的单个值。
特点:1、不同元素组成 2、无序 3、集合中的元素必须是不可变类型
好,这样大家应该能够理解一些了吧。按照惯例,来说下其基本使用方法:
1.字典的创建
names = {} # 创建了一个空字典
d1 = {'Tony':29,'Pety':25} # 创建了两个由姓名:年龄键值对组成的字典
d2 = {'Kate':18} # 创建了一个元素的字典
print(type(d1))
print(len(d1))
>>>
2
2.字典中对键值对的设置要求
那么,首先来看对键的要求:
a) 唯一性: 一个字典对象里所有的键必须唯一,顾名思义,就是不能重复。一般而言,键是由一对单引号括起来的字符串组成,当然也可以是数字
来看下具体的例子:
d3 = {1:'sheep',2:'tiger',3:'lion',3:'lion'}
print(len(d3))
>>>3
print(d3)
>>> {1: 'sheep', 2: 'tiger', 3: 'lion'}
d4 = {1:'sheep',2:'tiger',3:'lion',3:'elephant'}
print(d4)
>>> {1: 'sheep', 2: 'tiger', 3: 'elephant'}
由此可见,虽然允许在创建字典的时候输入重复的内容,但实际调用时却只会保留最后一个键相同的元素,对于python3.x版本而言,希望各位在创建字典时养成一个检查键值对是否唯一的好习惯,以免代码的运行结果和预期的差异。
b)不可变性
由于键名是唯一的,一旦创建就不能修改但是更改键对应的值是被允许的。并且值可以支持python的任何对象。
例如 d5 = {6:'m',7:[1,2,3],8:{'a':'abc'}}
3.字典的自带的基本方法:
方法 功能描述
clean 字典清空
copy 复制并生成另外一个字典
fromkeys 使用给定的键建立新的字典,每个键默认对应的值为None
get 根据指定键,返回对应值,当访问的键不存在时,返回None
items 以元组数组的形式返回字典中的元素
keys 返回键的类似列表的形式
pop 删除指定键的元素,并返回指定键对应的值
popitem 随机返回元素,并删除元素
setdefault 当字典中键不存在时,设置键值对; 当字典中键存在时,获取键对应的值
update 利用一个字典更新另外一个字典
values 返回值的类似列表的形式
字典内部是由哈希表构成的,并且是无序的,所以没有提供sort方法,而列表、元组是有序列表,注意他们之间的区别。
下面会拿其中几个方法来介绍具体使用
4.字典元素的增加
d1= {'Tony':23,'Jack':18}
d1['Kate'] = 20
print(d1)
>>> {'Tony': 23, 'Jack': 18, 'Kate': 20}
上述操作中当对应的键不存在字典中时,会创建这个键值对,否则会修改键对应的值。
5.利用setdefault()方法给字典增加元素
使用格式为字典名.setdefault(k[,d]),其中k为字典新增的键,d为新增键对应的值。如果不提供d的值,则默认为None。
d1 = {'Tony': 23, 'Jack': 18, 'Kate': 20}
d1.setdefault('Alex',25)
print(d1)
d2 = d1.setdefault('Helen')
print(d2)
>>>{'Tony': 23, 'Jack': 18, 'Kate': 20, 'Alex': 25}
None
6.字典值的查询
a) 利用字典名[键名]查询
colors = {'red':(255,0,0),'green':(0,255,0),'blue':(0,0,255)}
colors['red']
>>> (255, 0, 0)
# 如果访问的键不存在,则会报错
KeyError
Traceback (most recent call last)
in
----> 1 colors['yellow']
KeyError: 'yellow'
b)利用 字典名.get(k)方法查询,k含义为要查询的键
colors = {'red':(255,0,0),'green':(0,255,0),'blue':(0,0,255)}
colors.get('red')
>>> (255, 0, 0)
如果同样访问一个不存在的键,会是什么结果呢?
colors.get('yellow')
>>>
咦,是啥都没有,返回了空值。这样在实际代码开发中会更加合乎业务的需要。
7.字典中值的修改
a)利用赋值语句修改键对应的值
d5 = {'Tony': 23, 'Jack': 18, 'Kate': 20, 'Alex': 25}
d5['Tony'] = 22
print(d5)
>>> {'Tony': 22, 'Jack': 18, 'Kate': 20, 'Alex': 25}
b)利用字典1.update(字典2)
其作用是用字典2里面的元素,更新字典1里面的元素,若字典2里面的某个键在字典1里面存在,则用字典2里的键修改字典1里同名键的值,若不存在,则会将余下的键值对作为新增键值对,对字典1进行更新。这个说法有点绕,但是用一个示例来解释应该会比较清楚。
d5 = {'Tony': 23, 'Jack': 18, 'Kate': 20, 'Alex': 25}
d6= {'Tom': 18, 'Kate': 28, 'Alice': 26}
d5.update(d6)
print(d5)
>>> {'Tony': 23, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
字典的增、改、查都介绍了,那么下面介绍下删除方法吧。
8.字典元素的删除
在我们的代码开发中,对于不需要的字典元素,可以通过代码来从内存中删除。
a)利用del()方法删除
d6 = {'Tony': 23, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
del(d6['Jack'])
print(d6)
>>> {'Tony': 23, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
b) 利用pop()方法删除
d7 = d6.pop('Kate')
print(d7)
>>> 28
c)利用字典.popitem()方法删除
d6 = {'Tony': 23, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
k1,v1 = d6.popitem()
print(k1,v1)
>>>Alice 26 # 虽然不带括号,其实是以元组的形式返回结果的
('Tom', 18).
d) 利用字典.clear()方法删除
d6.clear()
print(d6)
>>> {}
返回的结果是一个空字典,也就是删除了字典的全部元素,字典还是可以调用的。
9.其他的一些方法
a)in 成员操作
d6 = {'Tony': 23, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
'Tony' in d6.keys()
>>> True
'Tim' in d6.keys()
>>> False
存在就返回结果True ,否则是False
b) copy()方法
d6 = {'Tony': 23, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
d7= d6.copy()
print(id(d6)). >>> 4391501760
print(id(d7)). >>> 4392082496
d8 = d6
print(id(d8)). >>> 4391501760
这里通过copy ()方法的复制,d7的内存地址明显和d6的内存地址不同,而d8是直接通过d6赋值的方法生成的,其内存地址和d6相同
d6['Tony']= 20
print(d6) >>>{'Tony': 20, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
print(d7) >>>{'Tony': 23, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
print(d8) >>>{'Tony': 20, 'Jack': 18, 'Kate': 28, 'Alex': 25, 'Tom': 18, 'Alice': 26}
通过d6的一个元素的修改操作,可以发现d6和d8字典中的元素同时发生了改变,而d7字典中的元素仍然没有变化。大家可以多加练习并观察它们的不同。
c)字典.fromkeys()方法
字典.fromkeys(iterable),其中iterable 代表列表对象。
d9 = {}
d10 = d9.fromkeys(['a','b','c'])
print(d10)
>>> {'a': None, 'b': None, 'c': None}
不难发现,键是列表中的每个元素,而值是空的。那这个方法有什么特殊的用途呢?还真有,可以应用在一些特定的场景,例如在搭建大型商城时,商品初始化时就会用这个方法,只有商品名,而没有确定对应的价格。
好了,我也敲得好累,内容比较多。谢谢大家能坚持看到最后。
那么数据类型的内容就基本介绍完了,集合的具体差、并集,在基础部分不会涉及它的应用,所以会在以后项目实战的时候再拿出来具体讲解,抱歉。
下个内容将会是流程控制,敬请期待。