字典和集合
字典dict类型是python语言的基石,散列表是字典性能出众的根本原因
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。
它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
泛映射类型
collections.abc
模块下的Mapping
和MutableMapping
这两个抽象基类,为dict和其他类似的类型定义了形式接口。
字典推导
字典也可以用推导的方式构建
key:字典中的key
value:字典中的value
dict.items():序列
condition:条件表达式
key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
value_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
{key_exp:value_exp for key,value in dict.items() if condition}
key:字典中的key
value:字典中的value
dict.items():序列
condition:条件表达式
key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
value_exp1:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp1处理
value_exp2:在for循环中,如果条件表达式condition不成立(即条件表达式不成立),返回对应的key,value并作key_exp,value_exp2处理
{key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
常见映射方法
- dict
- collections.defaultdict
- collections.OrderedDict
只有collections.defaultdict
有d.default_factory
属性,返回一个可调用对象(callable),其值在初始化的时候由用户设定。
只有collections.OrderedDict
有d.move_to_end(k,[last])
方法,把键为k的元素移动到最靠前或者最靠后的位置,last默认为True
。
OrderedDict.popitem()
移除元素默认为先进先出,当可选参数last为True
则会变成后进先出。
处理找不到的键
当d[k]找不到正确的键时会抛出异常,可以用d.get(k, default)来处理,但效率较低。
如果d[k]为一个列表,每次往列表中添加新元素,需要判断d[k]是否存在。
d.get(k, [])
d[k].append(new_item)
# 或者写成
d.setdefault(k, []).append(new_item)
映射的弹性键查询
当需要查询的d[k]不存在,又想读取一个默认值,有以下两种方法
- defaultdict
- _missing_