您的位置:首页 > 编程语言 > Python开发

【python】特色数据类型——字典(列表、元组、字典、集合)(7)

2018-02-06 17:35 1146 查看
参考 Python从零开始系列连载,by 王大伟 Python爱好者社区

参考 Hellobi Live | 1小时破冰入门Python

参考 《简明python教程》

Note: 更多连载请查看【python】

目录

目录

字典
1 字典的创建
1.1 用大括号{}创建

1.2 创建空字典

1.3 用dict()创建
1.3.1 列表套元组

1.3.2 元组套列表

1.3.3 元组套元组

1.3.4 列表套列表

1.4 借助dict()和等号来创建

2 访问字典中的值

3 添加字典的键值对

4 修改字典的键值对

5 删除字典的键值对

6 字典的遍历

7 字典的复制
7.1 浅复制

7.2 深复制

8 字典的一些基本方法
8.1 keys()

8.2 values()

8.3 items()

8.4 clear()

8.5 get()

8.6 pop()

8.7 setdefault()

8.8 updata()

字典



字典是一些列键(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】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐