终于到基础数据结构的最后了,字典(Dict)是python中用途最大,最好玩的东西了
认识字典
什么是字典?正如生活中的字典一样,python中的字典可以进行查询,反馈等。
python中的字典由一大堆的 关键字(key) 和 值 (value) 构成,其中有一条规则和数学中的函数相似,就是一个关键字只能对应一个值,而一个值可以对应多个关键字,即一个x值对应一个y值,而一个y值可对应多个x值
可以说是囊括了众多变量和值的集合,但是要注意的是,字典的关键字不能是没有赋值变量,其他任何合法的都行,例子
a = {'xrl':123,'dsa':321,'dra':55}
b = {1:12,2:23,3:432}
c = {print(123):'23'}
print(a)
print(b)
print(c)
虽然我是这么举例的,但是极力不推荐第2,3种字典,在运行的时候,你会发现使用第2,3种字典会是你有点搞不清关键字与值,大家可以自己复制下来运行一下看下结果
字典的通式
看过字典的例子之后,我们可以看出字典的通式是{关键字1:值1,关键字2:值2,关键字3:值3}
有人会说字典是用的括号和集合一样是{}大括号,但是python不会误解集合和字典,python会默认{}内只有元素的序列为集合,{}同时有关键字和值的为字典,而且{}什么都没时为表示为空字典,而不是空集合
获取字典内关键字对应的的值
直接给例子
Dict1 = {'name':'xrl','age':17,'sex':'male'}
print(Dict1['name'],Dict1['age'],Dict1['sex'])
结果是
xrl 17 male
执行程序类值
我们同样也可以讲值设定为一个可执行的程序,例
Dict2 = {'tell me name':print('my name is python'),'what is 1+1':1+1}
print(Dict2['tell me name'],Dict2['what is 1+1'])
有时可以方便你运行的自动化
获取值对应的关键字
这会有点复杂,就像我们在数学函数中用 y求x 比 x求y 难一样……,下面是方法
Dict3 = {'xx':1,'as':1,'fe':2,'zv':3,'qw':3,'fd':4}
#假设我们要求值为3的关键字
for i in Dict3.keys(): #Dict3.keys()这个函数用于返回一个包囊了字典内所有关键字的列表
if Dict3[i] == 3:
print('3 对应的关键字有',i)
结果为
3 对应的关键字有 zv
3 对应的关键字有 qw
我们需要通过循环的方式一个一个的去套,套中了话就是该值的关键字
字典的修改
手动修改
我们可以通过和列表一样的老套路来进行修改
Dict4 = {'xx':1,'as':1,'fe':2,'zv':3,'qw':3,'fd':4}
Dict4['xx'] = 3
print(Dict4)
从结果中我们可以看到'xx'关键字的值从原来的1改为了3
{'xx': 3, 'as': 1, 'fe': 2, 'zv': 3, 'qw': 3, 'fd': 4}
批量修改
还是一样要用到循环,假设我们要把所有对应值不是3的关键字的值全部修改为3,大家可以复制下来操作一下
Dict5 = {'xx':1,'as':1,'fe':2,'zv':3,'qw':4,'fd':4,'ds':1,'df':5,'zxc':7,'qe':3,'zq':6,'ew':9}
for i in Dict5.keys():
if Dict5[i] != 3:
Dict5[i] = 3
print('值不是3的关键字的值已经修改成了3')
else:
print('这个关键字的值是3,所以没有修改')
print(Dict5)
字典关键字与值的添加
和关键字的值的修改一样,只不过当关键字没有时,就成了添加关键词与值
Dict6 = {'xx':12,'yy':32}
Dict6['zz'] = 43
print(Dict6)
结果为
{'xx': 12, 'yy': 32, 'zz': 43}
字典关键字的删除
使用 python中的del关键字删除,例
Dict7 = {'xx':12,'yy':32}
del Dict7['xx']
print(Dict7)
结果为
{'yy': 32}
字典的内置函数
下面是字典的内置函数
函数 | 结果 | 用处 |
dict.clear(a) |
a为{}(空字典) #a字典内的所有的关键字被删除 | 用于删除字典内所有的关键字(当然值也跟着没了) |
b = dict.copy(a) | b字典浅复制了a字典内的内容 | 用于字典的浅复制 |
b = dict.fromkeys(a,12) | b复制了a中所有关键字,并将所有关键字的值设定为12 | 用于关键字的全部复制,及重新定义所有关键字的值 |
a.get('xxx') | 返回了a字典中关键字为'xxx'的值(前提是a字典中有'xxx') | 返回字典中对应关键字的值,和a['xxx']相似,但是若没有的对应关键字的话系统不会报错,而是什么都不返回 |
'xxx' in a | 返回True or False | 判断关键字是否存在于字典中 |
a.items() | 返回dict_items([(关键字1,值1),……]) | 返回可以遍历的元组列表(要用list(……)才能成为真正的列表,列表中的每一项元组中,前面是关键字,后面是值) |
a.keys() | dict.keys([关键字1,关键字2,关键字3,……]) | 以列表的形式返回字典中所有的关键字 |
a.setdefault(关键字,值) | 若关键字存在,返回关键字的值 若不存在,则添加该关键字于值并返回值 |
合并了 a['xxxxx']查找 ,与 a['yyyy'] = ……修改与添加 的样子 |
b.update(a) | 将字典a中的所有关键字与值添加到b中 | 用与字典的更新,不同于 字典1 = 字典2 这是一种叠加式的添加 |
a.values() | dict_values([值1,值2,值3,……]) | 返回字典内所有的值 |
关于浅复制(浅拷贝)的解释
在上面所呈现的函数列表中有一个字典的函数为dict.copy(字典)#用于字典的浅复制(浅拷贝)
大家可以参考右边的网站去了解一下关于浅复制(浅拷贝)>>python的浅拷贝<<
那么python主要的数据的结构就基本讲完了,大家可以试着从数据和算法中发现python的方便给你带来的快感!