【读书笔记】 - 《流畅的python》03-字典和集合

字典和集合

字典dict类型是python语言的基石,散列表是字典性能出众的根本原因

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。
它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

泛映射类型

collections.abc模块下的MappingMutableMapping这两个抽象基类,为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.defaultdictd.default_factory属性,返回一个可调用对象(callable),其值在初始化的时候由用户设定。

只有collections.OrderedDictd.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]不存在,又想读取一个默认值,有以下两种方法

  1. defaultdict
  2. _missing_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canmoumou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值