chapter3.3字典

字典

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的输入顺序本身无序

原文地址:https://www.cnblogs.com/rprp789/p/9478031.html