字典
字典有两部分组成,即键值对,每个键值对用冒号隔开,每对之间用逗号隔开{键1:值1,键2,:值2}
创建字典 用{}
dict1={"tian":19,"li":20}
dict1
{'tian': 19, 'li': 20}
type(dict1)
dict
划重点:键必须是唯一的,必须是不可变的,如字符串,数字,元组,值可以是任何数据类型
我们来创造个复杂的字典
dict2={'乐子':[1,'a',['aa',1,2,3]],'python':('hello world')}
dict2
{'乐子': [1, 'a', ['aa', 1, 2, 3]], 'python': 'hello world'}
dict2['乐子']##后面只可以放键的值
[1, 'a', ['aa', 1, 2, 3]]
创建空字典:
dict3={}
type(dict3)
dict
除了直接用大括号创建字典,还可以用dict()来创建字典
用法如下:
通过放入列表套元组
或者元组套列表
实现或者列表套列表
、元组套元组
个人喜欢列表套元组
还记得上节课在元组里讲到的列表和元组的相互转换么?
dict4=dict([('bob',14),('ali',16)])
dict4
{'bob': 14, 'ali': 16}
dict5=dict([['bob',14],['ali',16]])
dict5
{'bob': 14, 'ali': 16}
dict6=dict((('bob',14),('ali',16)))
dict6
{'bob': 14, 'ali': 16}
dict7=dict((['bob',14],['ali',16]))
dict7
{'bob': 14, 'ali': 16}
其实还可以这样创建,借助等于号 =:
dict8=dict('bob'=14,'alic'=18)
File "<ipython-input-21-a9cf83c644ce>", line 1
dict8=dict('bob'=14,'alic'=18)
^
SyntaxError: keyword can't be an expression
这种情况下,键只能为字符串类型,并且创建的时候字符串不用加引号
dict8=dict(bob=14,alic=18)
dict8
{'bob': 14, 'alic': 18}
用这种方法不能创建键为数值型的字典,创建数值型字典需要如下:
dict9={1:12,2:15}
dict9
{1: 12, 2: 15}
访问字典中的值:
和列表元组的索引相似,以以下形式访问键对应的值:
字典名[键]
查查字典里是否有某个键 用 in 函数
5 in dict9
False
1 in dict9
True
更新字典 添加、删除、更新修改 字典中的键值对:
dict4
{'bob': 14, 'ali': 16}
dict4[5]=16 ##增加键值对
dict4['ALA']=23
dict4
{'bob': 14, 'ali': 16, 5: 16, 'ALA': 23}
dict4['bob']=23 ##更改键值对
dict4
{'bob': 23, 'ali': 16, 5: 16, 'ALA': 23}
del dict4['ALA'] #删除键值对
dict4
{'bob': 23, 5: 16}
字典的操作
字典提供了很多方法对字典操作:
1.dict.keys()
作用:返回包含字典所有key的列表
2.dict.values()
作用:返回包含字典所有value的列表
3.dict.items()
作用:返回包含所有(键,值)项的列表
4.dict.clear()
作用:删除字典中的所有项或元素,无返回值(注意,不是删除字典,而是清空字典内容)
5.dict.get(key , default=None)
作用:返回字典中key对应的值,若key不存在,则返回default的值(default默认为None)
6.dict.pop(key [,default])
作用:如果字典中存在key,则删除并返回key对应的value;如果key不存在,且没有给出default值,则引发KeyError异常
7.dict.setdefault(key , default = None)
作用:如果字典不存在key,则由dict[key] = default为其赋值
8.dict.update(adict)
作用:将字典adict中键值对添加到dict中
dict4
{'bob': 23, 5: 16}
dict4.keys()
dict_keys(['bob', 5])
dict4.values()
dict_values([23, 16])
dict4.items()
dict_items([('bob', 23), (5, 16)])
dict4.get('bob') #返回字典中key对应的值,若key不存在,则返回default的值
23
dict4.pop('bob')
23
dict4
{5: 16}
dict4.update(dict8) ##将字典dict8中键值对添加到dict4中
dict4
{5: 16, 'bob': 14, 'alic': 18}
遍历字典只需要遍历它的键
for i in dict4.keys():
print(i, dict4[i])
5 16
bob 14
alic 18
(重点)字典的复制:
当我们需要复制一份同样的字典,怎么操作呢?
dict10=dict4
id(dict4)
2015389329880
id(dict10)
2015389329880
id( ) 的作用是找到变量或常量在内存中存的位置,发现dict1和dict3的id一样所以得出他们虽然是两个变量,但是变量的值是同一个也就是说,桌上有一盒月饼,可以说是我的,也可以说是你的你吃了一块月饼少了一块所以我的月饼少了一块因为这是我们共有的月饼
dict4[5]=20
dict4
{5: 20, 'bob': 14, 'alic': 18}
dict10
{5: 20, 'bob': 14, 'alic': 18}
上面就是所谓的浅拷贝
相对应
在字典中,深拷贝可以用引入copy模块实现
import copy
dict10=copy.deepcopy(dict4)
id(dict10)
2015389705488
id(dict4)
2015389329880
dict4.clear()
dict4
{}
dict10
{5: 20, 'bob': 14, 'alic': 18}