返回

Python dict 高阶特性

发布时间:2022-12-16 14:50:17 291

特性(基于Python 3.4 流畅的Python 部分可能不适用最新版本)

键必须可散列

字典和集合实现的背后是散列。散列最小单元是表元。

内存开销巨大

相比列表将占用大量内存。典型的用空间换时间。在定义数据类型时,尽可能采用__slots__ 属性可以改变实例属性的存储 方式, 由 dict 变成 tuple

键查询速度极快

基于散列特性字典和集合对in进行了优化。in查询效率非常高

将迭代和更新尽可能分开

无论何时往字典里添加新的键, Python 解释器都可能做出为字典扩容的决定。 扩容导致的结果就是要新建一个更大的散列表, 并把字典里已有的元素添加到新表里。 这个过程中可能会发生新的散列冲突, 导致新散列表中键的次序变化。 要注意的是, 上面提到的这些变化是否会发生以及如何发生, 都依赖于字典背后的具体实现, 因此你不能很自信地说自己知道背后发生了什么。 如果你在迭代一个字典的所有键的过程中同时对字典进行修改, 那么这个循环很有可能会跳过一些键——甚至是跳过那些字典中已经有的键。由此可知, 不要对字典同时进行迭代和修改。 如果想扫描并修改一个字典, 最好分成两步来进行: 首先对字典迭代, 以得出需要添加的内容, 把这些内容放在一个新字典里; 迭代结束之后再对原有字典进行更新

dict 找不到键选择

字典嵌套案例

defaultdict

import collections
import random

data = collections.defaultdict(list)
v = [random.randint(1, 3) for _ in range(10)]

for item in range(5):
    data[item].append(item)

setdefault

import random

data = {}
v = [random.randint(1, 3) for _ in range(10)]

for item in range(5):
    data.setdefault(item, []).append(item)

pop

删除一个指定键值对

d = {}
d.pop(key, default)
# 指定默认值,键不存在时返回默认值。类似 get

reversed

返回倒序键的迭代器

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Python工具箱系列(二十) 2022-12-16 14:10:05