前言:
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。
目录:
- 内容回顾
- 相关资料
- 阅读后感
正文:
一. 内容回顾
1.1 泛映射类型
Mapping和MutableMapping这两个抽象类,他们的作用是为了dict和其他类似的类型定义形式接口。
1.2 字典推导
列表推导和生成器表达式的概念移植在字典上,从而使得字典推导有了以任何键值作为元素迭代构建出字典。
1.3 常见的映射方法
'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues'
1.4 映射的弹性健查询
defaultdict 处理找不到的健的一个选择,以及特殊方法 _ missing_,都是为了在找不到健的时候,给个默认值。
1.5 字典的变种
collections.Counter
ct = collections.Counter('adsdsvadacadr')
print ct
执行结果:
Counter({'a': 4, 'd': 4, 's': 2, 'c': 1, 'r': 1, 'v': 1})
1.6 子类化UserDict
import collections
class StrKeyDict(collections.UserDict):
def __missing__(self, key):
if isinstance(key, str):
raise KeyError(key)
return self[str(key)]
def __contains__(self, key):
return str(key) in self.data
def __setitem__(self, key, item):
self.data[str(key)] = item
1.7 不可变映射类型
MappingProxyType来获取只读的字典,防止用户错误地修改某个映射。
1.8 集合论
集合可以用于去重( set )。
1.9 dict和set的背后
dict和set的效率很高,举例:在一个有1000万个健的字典里查找1000个数,花在每个数上的时间不过是0.337毫秒。
二. 相关资料
Python字典的常用操作方法:
1.has_key(‘key名称’)
判断字典里是否有该键存在,如果存在的话返回True,不存在的话返回False
比如
a.has_key(“name”)返回True
a.has_key(“sss”)返回False
2.keys()返回的是字典键组成的列表
比如a.keys()
返回:[‘age’,’name’]
3.values返回的是字典值组成的列表
比如a.values()
返回:[23,’xiaoming’]
4.update()方法,把2个字典进行合并
比如我现在又建立了一个
b = {‘sex’:’man’}
a.update(b)
print a
输出的结果是:{‘age’: 23, ‘name’: ‘xiaoming’, ‘sex’: ‘man’}
5.update方法也可以更新和添加字典
>>> info = dict(name='cold', blog='linuxzen.com')
>>> info.update({'name':'cold night', 'blogname':'linuxzen'})
>>> info
{'blog': 'linuxzen.com', 'name': 'cold night', 'blogname': 'linuxzen'}
>>> info.update(name='cold', blog='www.linuxzen.com') # 更优雅
>>> info
{'blog': 'www.linuxzen.com', 'name': 'cold', 'blogname': 'linuxzen'}
三. 阅读后感
收获在映射类型API中,_ missing_是个很好的方法,当对象找不到某个健的时候,可以通过这个方法自定义会发生什么。
参考:
1. Python字典和集合
2. 高性能Python-字典和集合