python渐进---dict字典

原载于https://mp.weixin.qq.com/s/u54b2DpHThvQXyJJ6H0lGg


dict使用key:value对的形式来储存数据。dict在存储数据的时候更加直观,因为作为key的索引可以用更易理解的方式存在。list和tuple的索引是冰冷的数字,不知道哪个是哪个。任何不可变变量都可以用作key,像数字,字符串,上一节所说的tuple都是不可变变量,它们都可以作为key;value的类型就更广了,所有不可变变量和可变变量都可以作为value。


6.3.1 dict的创建

dict使用大括号括起的逗号分隔的(key:value)对进行创建。比如说要记录学生的成绩,可以产生多个(学生姓名:学生成绩)的(key:value)对来进行创建。演示代码如下:

>>>a={'zhang':97,'lee':80,'zhao':99}
>>> a['zhang']
97


如果不确定字典里面到底有多少个元素,那么也可以先生成一个空的dict,再慢慢添加。演示代码如下:

>>> b=dict()
>>> b['zhang']=97
>>> b['lee']=80
>>> b['zhao']=99
>>> b
{'zhao':99, 'lee': 80, 'zhang': 97}

上面的代码中,使用dict()来生成一个空字典是必要的。如果没有dict(),直接给b赋值的话会出现错误。


dict类型的数据还可以用二维数组来创建。先用list或者tuple生成多个(key,value)的序列,然后使用dict()进行类型转换,也可以生成一个字典。演示代码如下:

>>>c=dict([['zhang',97],['lee',80],['zhao',99]])
>>>c
{'zhao':99, 'lee': 80, 'zhang': 97}


6.3.2 dict的访问

想要访问dict,只需要知道key值。

刚刚讲过,任何不可变变量都可以作为key值,数字,字符串,tuple都可以作为key值。演示代码段如下:

>>> d=dict()
>>> d[1]=1
>>> d[2.0]=2.0
>>> d['s']='s'
>>> d
{1: 1,2.0: 2.0, 's': 's'}
>>> t=(1,2)
>>> d[t]=[1,2]
>>> d
{(1,2): [1, 2], 1: 1, 2.0: 2.0, 's': 's'}


而list则不能作为key值

>>> d=dict()
>>> l=[1,2]
>>> d[l]=[1,2]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'


这里有一个有趣的小把戏,tuple里面其实是可以藏一个list的,这样tuple就变成了可变变量了。我们来看看它作为key会怎样。

>>> tl=(1,[2,3])
>>> d[tl]=(1,[2,3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

可以看到,python很聪明地把这个小把戏戳穿了。tuple里面的list没能蒙混过关。


确定了key值,就可以通过key值获取数据。演示代码如下:

>>> d['s']
's'


想要遍历dict,可以使用for语句进行。因为dict也是一个可迭代的类型。演示代码如下。

>>> for k in d:
...     print(d[k])
... 
[1, 2]
1
2.0
s


6.3.3 dict的增加和修改

如果想要增加一个key:value对,而dict里面不存在这个key,这个时候直接赋值即可。

>>> d['add']='add'
>>> d
{(1,2): [1, 2], 1: 1, 2.0: 2.0, 'add': 'add', 's': 's'}


如果key在dict里面已经存在了,那么赋值会修改原来的value值。

>>> d[1]=1111111
>>> d
{(1,2): [1, 2], 1: 1111111, 2.0: 2.0, 'add': 'add', 's': 's'}


6.3.4 dict的删除

和list一样,想要删除dict的元素,可以通过del操作来删除。想要删除某个key:value对,只要使用del dict[key]操作就可以了。演示代码如下:

>>> d
{(1, 2): [1, 2], 1: 1111111,2.0: 2.0, 'add': 'add', 's': 's'}
>>> del d[1]
>>> d
{(1, 2): [1, 2], 2.0: 2.0,'add': 'add', 's': 's'}


如果使用 del dict 会把整个dict删除。演示代码如下:

>>> del d
>>> d
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined


6.3.5 dict的字典推导式

和list类似,dict也有它的字典推导式,可以很快生成dict。只要了解list的列表推导式,应该很快就能够理解了。

>>> d={x:0 for x in ('zhang','lee','zhao')}
>>> d
{'zhao': 0, 'lee': 0, 'zhang': 0}


6.3.6 使用dict构造二维数组

使用dict来构造二维数组,对比list会更加有可读性。比如说有三个学生 zhang,lee,zhao,分别进行了数学和语文考试,每个人分别有两个成绩。此时可以用两个dict来嵌套构成二维数组。下面展示了一个简单的嵌套字典。

>>>studentdict={'zhang':{'math':90,'chs':90},'lee':{'math':80,'chs':78},'zhao':{'math':99,'chs':80}}


访问的时候可以直接通过 学生和科目的key组合来定位。

>>>studentdict['zhang']['math']
90


如果需要修改可以通过两层的key来定位,再进行修改。

>>>studentdict['zhang']['math']=95
>>>studentdict['zhang']['math']
95


此时如果需要新增一个学生,需要先初始化一个dict,否则就会出错。

>>>studentdict['chan']=dict()
>>>studentdict['chan']['math']=88


6.3.7 dict的有用方法

很多时候可能会想要知道dict里面都有什么key,用keys()方法就可以获取key的list。同时dict也有len()方法可以获取dict的长度。

>>> d={(1, 2): [1,2], 1: 1, 2.0: 2.0, 's': 's'}
>>> d.keys()
[(1, 2), 1, 2.0, 's']
>>> len(d)
4


这里要注意的是,keys()得到的list不是按照顺序排列的,也不是按照插入的顺序来排列的。python对于dict的key有一套二叉树排序,方便更快找到key。如果想要得到一个经过排序的key序列,可以对key序列使用sort()方法。

>>> dk=d.keys()
>>> dk.sort()
>>> dk
[1, 2.0, 's', (1, 2)]


本文完



猜你喜欢

转载自blog.csdn.net/weixin_42407546/article/details/80912880
今日推荐