您的位置:首页 > 理论基础 > 数据结构算法

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

2016-12-13 15:59 381 查看
字典,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=123
>>>d
{'a':123, 'b':2}
>>> d['c'] = 345#key不存在时,会自动创建一个key-value键值对
>>> d
{'c': 345, 'b': 2, 'a': 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=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的开发过程中应用非常广泛。因此,对字典的基本方法要反复练习,要求熟练掌握。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字典 python dict