字典
key-value键值对的数据集合
可变的,无序的,key不重复
字典定义,初始化
d = dict() 或 d = {}
dict(*kwargs)使用name = value对初始化字典
dict(iterable,**kwarg)使用可迭代对象和name=value对构造字典,可迭代对象必须是一个二元结构
d = dict(((1,'a',)(2,'b')))或者d = dict(([1,'a'],[2,'b']))
dict(mapping,**kwarg)使用字典构造另一个字典
d = {'a':10,'b':20,'c':None,'d':[1,2,3],'e':{1,2,3}}
d = dict.fromkeys(range(5))
a={a=1,b=2}
a={'a':1,'b':2}
key要求可hash,value无要求,
maping 映射
字典复制,复杂结构的引用地址不变,引用类型的引用计数加一
d={'a':10,;'b':None,'c':[1,2,3]}
字典元素的访问
d[key]
返回key对应的值value
key不存在抛出KeyError异常
d2.get('a'), 返回d2中 'a' 对应的值value,不存在返回缺省值,缺省值为空返回None
setdefault(key[,default]) 有key,取value,没有补缺省值,未设置缺省值就返回None
字典增加和修改
d[key] = value
update([other])-->None
使用另一个字典的kv对更新本字典
key不存在就添加
key存在,覆盖已经存在的key对应的值
就地修改
字典的删除
pop(key[,default]) key存在,移除,返回value,不存在返回缺省值default
popitem() 移除并返回任意的键值对,字典为空,抛出异常,少用
clear() 清空字典
del a 删除元素,对于引用对象,减少了一个对象的引用,删除的是名称,而不是对象,删除对象的引用计数
字典遍历
for ... in dict 遍历key,d.keys() ,d.values()
for item 遍历键值对
Python3中,keys,items,values方法返回的是类似生成器的可迭代对象,不会把返回的结果复制到内存中
Dictionary view对象,可以使用len()、iter()、in 操作
字典的entry的动态视图,字典变化,视图将反映出这些变化
keys返回亦歌类似set对象,也就是看作set集合,如果value都可以hash,那么items也可以看作类set对象
for k ,v in d2.items() 1433
字典不能在遍历时移除或增加元素,会报错,先将要移除的值的key放如列表中,再统一移除
key,与set元素要求一致
set可以看作dict的简化版
hashable 可hash才可以作为key,使用hash()测试
defaultdict(default_factory[, ...]) --> dict with default factory
第一个参数default_factory,缺省是None,提供一个初始化函数,key不存在时,会调用这个工厂函数生成key对应的value
from collections import defaultdict
OrderedDict(self, /, *args, **kwargs)
3.6版本的Python字典直接是OrderedDict,排序好的,(Ipython不一定有效果)在3.5和之前是无序的.
有序字典可以记录元素插入顺序,打印也是这个顺序
使用OrderedDict来记录顺序,key的输入顺序本身无序