字典,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的开发过程中应用非常广泛。因此,对字典的基本方法要反复练习,要求熟练掌握。
本文出自 “无飞天下” 博客,请务必保留此出处http://hf1208.blog.51cto.com/8957433/1882311
原文地址:http://hf1208.blog.51cto.com/8957433/1882311