首页 > 代码库 > python课程第三周 内置数据结构——字典

python课程第三周 内置数据结构——字典

字典,Python中的无序集合,key-value结构,通过键来访问对应的值,而不是依靠偏移或者索引来访问值。下面是字典的一些基本属性:

  • 字典的value可以是任意值,例如数字、字符串、列表、元组,甚至是字典本身

  • 字典的key必须是可hash的值

  • 字典的key是唯一的

  • 字典没有切片操作,只能通过key来访问value

  • 字典内的元素都是无序存储的

  • 可变长度、异构、任意嵌套

  • 对象引用表:采用最优化的散列算法来查找键,因此键搜索速度非常快,字典存储的是对象引用(而不是拷贝)。


字典的初始化

d=dict() #空字典
d={}#空字典
d={‘a‘:‘b‘}#单个键值对的字典
d = dict.fromkeys([‘a‘, ‘b‘]) #会创建一个{‘a‘:None, ‘b‘:None}字典
d = dict(zip(keylist, valuelist)) #多个键值对的字典,keylist和valuelist必须是可迭代对象

字典的下标操作

d= {‘a‘:1,‘b‘:2}
>>>d[‘a‘]
1
>>>d[‘a‘]=123 #修改value=http://www.mamicode.com/123>
>>> d[‘d‘]#当访问不存在的key时,会返回一个KeyError错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: ‘d‘


字典常用方法

update() #可接受一个字典、一个二元组构成的可迭代对象、或关键字参数作为函数参数,然后把参数添加到调用方法的字典里面去。

通过key直接增加对应的键值对

setdefault(k,[d])   #给字典增加一个元素,如果k存在时,返回对应的值v,不存在时,增加k-d键值对并返回d。

示例如下:

通过update方法:

>>>d={‘a‘:1,‘b‘:2}
>>>d.update(c=3)  #给d增加一个键值对‘c‘:3
>>>d
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1}
>>>d.update([(‘f‘,4),(‘g‘,5)]) #给d增加两个键值对,使用二元组构成的可迭代对象做参数的方式。
>>> d
{‘c‘: 3, ‘b‘: 2, ‘f‘: 4, ‘a‘: 1, ‘g‘: 5}
>>>d.update({‘e‘:5})   #给d增加一个键值对,使用字典做参数的方式
>>> d
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1, ‘e‘: 5, ‘g‘: 5, ‘f‘: 4}


通过key来添加值

>>>d = {‘a‘:1, ‘b‘:2}
>>>d[‘c‘] = 3 #此时d就是{‘a‘:1, ‘b‘:2, ‘c‘:3}


通过setdefault函数

>>>d = {‘a‘:1, ‘b‘:2}
>>>d.setdefault(‘a‘, 2)# 返回‘a‘对应的值1
1
>>> d.setdefault(‘h‘,10)#在d中增加键值对 ‘h‘:10,并返回值10
10
>>> d
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1, ‘e‘: 5, ‘g‘: 5, ‘h‘: 10, ‘f‘: 4}


pop(k,[d])   #根据给出的k,在字典中删除k,然后返回k对应的v,如果k不存在,返回给出的默认值d,如果没有给出默认值,返回KeyError

popitem()   #在字典中随机取一个键值对,然后作为一个元组返回,如果字典是空的,则返回一个KeyError

clear()   #删除字典里面的全部元素

del(d[key]) #del方法删除根据键删除对应的值,如果key不存在,则会报KeyError错误。

示例:

>>> d
{‘e‘: 234, ‘i‘: 555, ‘f‘: 3, ‘g‘: 333, ‘c‘: 3, ‘a‘: 123, ‘b‘: 2}   #d原来的值
>>> d.pop(‘e‘)    #删除‘e‘:234键值对,并返回234
234
>>> d.pop(‘j‘)   #删除不存在的键‘j‘,返回KeyError错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: ‘j‘
>>> d.pop(‘j‘,-1)   #删除不存在的键‘j‘,给出默认值-1,返回默认值
-1
>>> d.popitem()     #返回键值对
(‘i‘, 555)
>>>del(d[‘e‘]#不存在的键值对,报错。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: ‘e‘
>>>del(d[‘a‘])#删除‘a‘对应的值。
>>>d
{‘b‘: 2, ‘f‘: 3, ‘i‘: 555, ‘g‘: 333}

直接通过key来修改对应的值

update()  #根据给出的键来修改对应的值,键不存在则新增键值对

示例如下:

>>>d = {‘a‘:1, ‘b‘:2}
>>>d[‘a‘] = 3
>>>d
{‘b‘:2, ‘a‘:3}
>>>d.update(a=2)
>>>d
{‘b‘:2‘, ‘a‘:2}


通过key来访问对应的值

get(k,[d]) #通过k来访问对应值,对应值存在则返回对应值,不存在则返回默认值d,没有给出默认值则返回空。使用get方法来查找对应的值,可以有效避免值不存在时抛出KeyError错误

示例如下:

>>>d={‘a‘:1, ‘b‘:2}
>>>d[‘a‘]
1
>>> d.get(‘b‘,3)
2
>>> d.get(‘c‘,3)
3
>>> d.get(‘c‘)

字典也是序列的一种,因此也可以应用序列的一些常用的方法,例如len(d)是字典内键值对的数量。


字典的遍历

keys()   #返回一个dict_keys可迭代对象,包含所有的key,因此可以通过这个方法来遍历字典

values()   #返回一个dict_values可迭代对象,包含所有的value

items()    #返回一个dict_items(key-value键值对)可迭代对象,通过for循环或其他迭代工具可以取出键值对组成的元组

fromkeys(iterable,value=http://www.mamicode.com/None) #用于给字典初始化,以iterable里的对象作为key,默认的value是None

示例如下:

>>>d = {‘a‘:1, ‘b‘:2}
>>> d
{‘b‘: 2, ‘a‘: 1}
>>> for key in d.keys(): #通过键来遍历字典
...     print(key, ‘=>‘, d[key])
...
b => 2
a => 1

在python2中,使用上面的方法遍历字典返回的是一个键列表、值列表或键值对列表,但在python3中,返回的是可迭代对象。减少了内存占用。


键的排序

使用list转换返回的可迭代对象,然后使用sorted方法排序,在使用for循环依次读取键值对。示例如下:

>>> for key in sorted(list(d.keys())):
...     print(key, ‘=>‘, d[key])
...
a => 1
b => 2

本节主要介绍了Python的内置类型之一的字典,字典作为一种无序集合,通过键值对的形式进行数据存储,搜索的速度较快,同时还支持任意嵌套,根据需要增长和缩短,非常具有灵活性,因此在Python的开发过程中应用非常广泛。因此,对字典的基本方法要反复练习,要求熟练掌握。


本文出自 “无飞天下” 博客,请务必保留此出处http://hf1208.blog.51cto.com/8957433/1882311

python课程第三周 内置数据结构——字典