参考 Python从零开始系列连载,by 王大伟 Python爱好者社区
参考 Hellobi Live | 1小时破冰入门Python
参考 《简明python教程》
Note: 更多连载请查看【python】
目录
字典
字典是一些列键(key)值(value)对组成的,形式如下:{键1:值1,键2:值2}
每个键值对用冒号隔开,每对之间用逗号隔开
1 字典的创建
1.1 用大括号{}创建
dict1 = {'Bob':18,'Alice':17}#创建字典
print (dict1)
type(dict1)
结果为
{'Bob': 18, 'Alice': 17}
dict
键必须是唯一的,必须是不可变的,如字符串,数字,元组,值可以是任何数据类型
dict2 = {'莫莫':[1,'a',[2.33,'Python']],1:('Hello World!')}
dict2
结果为
{1: 'Hello World!', '莫莫': [1, 'a', [2.33, 'Python']]}
可以看出,字典的value可以是元组,也可以是列表
1.2 创建空字典
dict3 = {}#创建空字典
print (dict3)
type (dict3)
结果为
{}
dict
1.3 用dict()创建
除了直接用大括号创建字典,还可以用dict()来创建字典(不推荐)
用法如下:
通过放入列表套元组或者元组套列表实现
或者列表套列表 、元组套元组,还记得在元组里讲到的列表和元组的相互转换么?
1.3.1 列表套元组
dict4 = dict([('Bob',18),('Alice',17)]) # 除了直接用大括号创建字典,还可以用dict()来创建字典
dict4
结果为
{'Alice': 17, 'Bob': 18}
1.3.2 元组套列表
dict5 = dict((['Bob',18],['Alice',17]))
dict5
结果同上
1.3.3 元组套元组
dict6 = dict((('Bob',18),('Alice',17)))
结果同上
1.3.4 列表套列表
dict7 = dict([['Bob',18],['Alice',17]])
结果同上
1.4 借助dict()和等号来创建
这种创建字典情况下,键只能为字符串类型,并且创建的时候字符串不用加引号
dict8 = dict(Bob = 18 , Alice = 17)#这种创建字典情况下,键只能为字符串类型,并且创建的时候字符串不用加引号
dict8
结果同上
Note1:如果加了引号,会报错
SyntaxError: keyword can’t be an expression
Note2:用这种方法不能创建键为数值型的字典
SyntaxError: keyword can’t be an expression
用{}即可
dict9 = {1:18 , 2:17}
dict9
结果为
{1: 18, 2: 17}
2 访问字典中的值
3 添加字典的键值对
dict1 = {'Alice': 17, 'Bob': 18}
dict1['Tom'] = 19 #添加键值对
print (dict1)
结果为
{'Alice': 17, 'Bob': 18, 'Tom': 19}
4 修改字典的键值对
dict1 = {'Alice': 17, 'Bob': 18}
dict1['Alice'] = 18 #更新修改键值对
print (dict1)
结果为
{'Alice': 18, 'Bob': 18}
5 删除字典的键值对
dict1 = {'Alice': 17, 'Bob': 18}
del dict1['Bob'] #删除键值对
print (dict1)
结果为
{'Alice': 17}
6 字典的遍历
dict1 = {'Alice': 18, 'Tom': 19}
for key in dict1.keys():#遍历字典只需要遍历它的键
print(key,dict1[key])
结果为
Alice 18
Tom 19
7 字典的复制
复制分为潜复制和深复制,浅复制是复制品A1会随着被复制品A的改变而改变,深复制是复制品A1不会随着A的改变而变动,复制以后独立了。我们常常理解的复制对应着深复制。
7.1 浅复制
下面看一下浅复制
dict1 = {'Bob': None, 'Tom': 19}
dict2 = dict1
print (dict2)
dict1['Bob'] = 19
print(dict2)
结果为
{'Bob': None, 'Tom': 19}
{'Bob': 19, 'Tom': 19}
{'Bob': 19, 'Tom': 19}
可以看出,dict2随着dict1的改变而改变
我们来看看他们的内存地址
print (id(dict1))
print (id(dict2))
结果为
140113040589088
140113040589088
结果表明,dict1和dict2虽然是两个变量,但是指向着同一块内存空间
7.2 深复制
深拷贝可以用引入copy模块实现
import copy#深拷贝可以用引入copy模块实现
dict1 = {'Bob': None, 'Tom': 19}
dict2 = copy.deepcopy(dict1)
print(dict2)
dict1['Bob'] = 19
print(dict2)
dict1.clear()
print(dict1)
print(dict2)
结果为
{'Bob': None, 'Tom': 19}
{'Bob': None, 'Tom': 19}
{}
{'Bob': None, 'Tom': 19}
结果表明,dict2不会随着dict1的改变而改变,是深度复制,看看他们的内存地址
print(id(dict1))
print(id(dict2))
结果为
140113040575512
140113040589952
dict1和dict2是内存地址不同的两个变量
8 字典的一些基本方法
8.1 keys()
返回包含字典所有key的列表
dict1 = {'Alice': 17, 'Bob': 18}
dict1.keys()#返回包含字典所有key的列表
结果为
dict_keys(['Alice', 'Bob'])
8.2 values()
返回包含字典所有value的列表
dict1 = {'Alice': 17, 'Bob': 18}
dict1.values()#返回包含字典所有value的列表
结果为
dict_values([17, 18])
8.3 items()
返回包含所有(键,值)项的列表
dict1 = {'Alice': 17, 'Bob': 18}
dict1.items()#返回包含所有(键,值)项的列表
结果为
dict_items([('Alice', 17), ('Bob', 18)])
8.4 clear()
删除字典中的所有项或元素,无返回值 (注意,不是删除字典,而是清空字典内容)
dict2 = {'乐子': [1, 'a', [2.33, 'Python']], 1: 'Hello World!'}
dict2.clear()#删除字典中的所有项或元素,无返回值(注意,不是删除字典,而是清空字典内容)
dict2
结果为
{}
8.5 get()
返回字典中key对应的值,若key不存在,则返回default的值(default默认为None),区别于第二节访问字典中的值dict[key]的方法,dict[key]当key不存在时会报错,而get()是返回None
dict1 = {'Alice': 18, 'Tom': 19}
print (dict1.get('Alice'))#返回字典中key对应的值,若key不存在,则返回default的值(default默认为None)
print (dict1['Alice'])
print (dict1.get('Bob'))
结果为
18
18
None
8.6 pop()
如果字典中存在key,则删除并返回key对应的value;如果key不存在,且没有给出default值,则引发KeyError异常
dict1 = {'Alice': 18, 'Tom': 19}
a = dict1.pop('Alice')#如果字典中存在key,则删除并返回key对应的value;如果key不存在,且没有给出default值,则引发KeyError异常
print (a)
print (dict1)
结果为
18
{'Tom': 19}
8.7 setdefault()
如果字典不存在key,则由dict[key] = default为其赋值
dict1 = {'Alice': 18, 'Tom': 19}
dict1.setdefault('Bob')#如果字典不存在key,则由dict[key] = default为其赋值
dict1
结果为
{'Alice': 18, 'Bob': None, 'Tom': 19}
8.8 updata()
dict1.update(dict2) 是将字典dict2中键值对添加到dict1中
dict1 = {'Alice': 18, 'Tom': 19}
dict2 = {'a':1,'b':2}
dict1.update(dict2)#将字典dict2中键值对添加到dict1中
dict1
结果为
{'Alice': 18, 'Tom': 19, 'a': 1, 'b': 2}
Note: 更多连载请查看【python】