Python 字典的底层哈希数据结构

2023-11-25

我正在构建一个非常大的字典,并且正在执行许多检查以查看键是否在结构中,然后添加它是否唯一或如果相同则增加计数器。

Python 使用一个哈希数据结构存储字典(不要与加密哈希函数混淆)。查找的时间复杂度为 O(1),但如果哈希表已满,则必须重新哈希,这是非常昂贵的。

我的问题是,使用AVL二叉搜索树还是哈希表足够好?


唯一确定的方法是同时实现并检查,但我的明智猜测是字典会更快,因为二叉搜索树的查找和插入成本为 O(log(n)),我认为除了在最悲观的情况下(例如大规模哈希冲突),哈希表的 O(1) 查找将超过偶尔调整大小。

如果你看一下Python字典实现,你会看到:

  1. 字典一开始有 8 个条目 (PyDict_MINSIZE);
  2. 一本包含 50,000 条或更少条目的字典,随着其增长,其大小会增加四倍;
  3. 一本包含超过 50,000 个条目的字典,其大小会随着增长而增加一倍;
  4. 键哈希缓存在字典中,因此在调整字典大小时不会重新计算它们。

(The "优化字典的注意事项“也值得一读。)

因此,如果你的字典有 1,000,000 个条目,我相信它将被调整十一次大小 (8 → 32 → 128 → 512 → 2048 → 8192 → 32768 → 131072 → 262144 → 524288 → 1048576 → 2097152),代价是 2,009,768 次额外插入期间调整大小。这似乎比在 AVL 树中插入 1,000,000 次所涉及的所有重新平衡的成本要低得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 字典的底层哈希数据结构 的相关文章

  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • 在 nHibernate 关系中使用实体的 Lite 版本?

    在某些情况下 出于性能原因 创建一个实体的轻量级版本 指向同一个表 但映射的列较少 这是一个好主意吗 例如 如果我有一个包含 50 列的联系人表 并且在一些相关实体中 我可能对 FirstName 和 LastName 属性感兴趣 那么创建
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 如何隐藏 Html 日历面板中的年份部分?

    有没有办法隐藏年份部分 html 日历面板 只显示日历上的月份和日期部分 不幸的是 没有简单的答案 但是您可以使用替代方法 通过使用 JavaScript 强制用户仅输入月份和日期 var year new Date getFullYear
  • 按 ID 删除数百万行的最佳方法

    我需要从 PG 数据库中删除大约 200 万行 我有一个需要删除的 ID 列表 然而 我尝试做到这一点的任何方法都需要几天的时间 我尝试将它们放入表中并以 100 为一批进行操作 4 天后 该操作仍在运行 仅删除了 2972 68 行 我必
  • 带有数字和默认键盘的 UITextField

    为 邮政编码 邮政编码 字段创建了一个 UITextField 其键盘类型为 UIKeyboardTypeDefault 我想使用默认键盘 但希望默认显示数字和符号与字母相对应 当您在 Contacts app 中输入地址时 Apple 会
  • 使用 crontab 运行脚本时无法导入 Python MySQL 模块

    我正在使用 crontab 运行需要 MySQLdb 模块的 python 脚本 当我从命令行运行此脚本时 一切正常 但是 尝试使用 crontab 运行它会引发此错误 Traceback most recent call last Fil
  • Apple 的文本渲染如何绘制字体没有的字形?

    我对字体和编码有了基本的了解 但最近我不得不在我的舒适区之外做一些事情 转动字符 0x2716 重乘 x 变为CGPathRef 我使用了核心文本CTFontGetGlyphsForCharacters来完成这项工作 我明白 一个CGGly
  • 无法将不可变值作为 inout 参数传递:文字不可变,为什么?

    我想做一个函数来交换两个变量 但对于新的 swift 我不能使用 var import UIKit func swapF inout a Int inout with b Int print x a and y b a b b a prin
  • 如何在 Symfony 2 中通过伪造登录来测试 ACL 进行开发

    我正在开发基于 Symfony 2 的 Web 应用程序的一部分 与许多应用程序一样 需要身份验证和授权 我如何继续开发 通过传递或伪造登录来考虑 ACL 在文档中 login check身份验证和会话部分是否透明 我想我可能需要实现一个版
  • 用于调整窗口大小的自定义挂钩

    我正在创建一个自定义挂钩来捕获浏览器窗口大小 以便让我知道它是否是移动的 目前 我的问题是 React 告诉我它无法在 useEffect 挂钩中保留 screenSize 的变量值 我该如何解决这个问题 export default fu
  • 如何在 python 中进行 alpha 抠图

    如何在 python 中进行 alpha 抠图 更具体地说 如何提取图像的 alpha 通道 给定一个将像素标记为 100 前景 白色 100 背景 黑色 或未知 灰色 输入图像 输入三元图 使用库进行 alpha 抠图 这里有两个选项 都
  • WindowsFormsHost 是否适合用途(.net WPF 托管 WinForms)?

    GUI 驱动的应用程序需要托管一些基于 WinForms 的预构建组件 这些组件使用 GDI 和 DirectX 的组合提供高性能交互式视图 视图处理控制输入并显示自定义图形渲染 供应商在 WinForms 线束中对组件进行测试 商业应用程
  • 为什么返回 (h = key.hashCode()) ^ (h >>> 16) 而不是 key.hashcode ?

    我不认为这种方法可以避免碰撞 我认为如果key hashcode大于table length 就会发生冲突 更新 其实我指的是HashMap hash在 JDK 1 8 中 我对向下扩展高位的好处感到有点困惑 现在 我想在这个的帮助下我很清
  • 如何在本机反应中检测杀死应用程序中的应用程序?

    当应用程序被用户终止时 我想更改 API 的状态数据 我尝试过使用 componentWillUnmount 在应用程序关闭时更改数据 我还使用 AppState handleAppStateChange nextAppState gt i
  • 如何使用Jquery AJAX post传递多维数组?

    我一直在使用 Serialize 通过 Post 传递复选框表单数据 以获取可以容纳同一类别的多个项目的篮子 当我使用提交按钮发布它们时 它可以正常工作 可以在一个类别下传递和显示多个值 但是 当我使用 Jquery serialize 时
  • 错误:未找到:make

    我无法安装任何需要的软件包node gyp 错误消息是这样的 npm install node protobuf info trying registry request attempt 1 at 22 43 57 http GET htt
  • 如何转置 SQLite 中的表?

    你好 我在 SQlite 中有一个这样的表 User Group Role John Smith A admin John Smith B user Jane Doe A user Jane Doe B limit Jane Doe C a
  • WrapPanel:尝试使 ItemWidth 等于任何一个元素的最大宽度

    希望没有其他人问过这个问题 但我已经搜索过 但找不到任何提及 如果我错过了另一个解释这一点的问题 请随时为我指出正确的方向 我有一个带有数据绑定项的 WrapPanel 该项本质上包含一个图标和一些可变长度文本 这是图表的图例 我真的很喜欢
  • 打印可滚动的 Windows 窗体。 [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中截取 Winforms 控件 表单的屏幕截图 我有一个带有名称和图片列表的 Windows 窗体 该列表很长 因此有一个滚动面板 现在 我想打印此表单 但不能 因为打印功能仅打印 可见
  • 为什么在 ScrollViewer 内部单击时我的 TextBox 会获得焦点?

    在我的 Windows 应用商店应用程序中 我创建了一个 ScrollViewer 里面有一个网格 里面有一些文本框 每当用户单击 ScrollViewer 中的任意位置时 第一个 TextBox 就会获得焦点 我不知道为什么会发生这种情况
  • 使用 TensorFlow 对图像中的点进行插值采样

    给定的是灰度图像I作为 2D 张量 维度 W H 和坐标张量C 暗淡 无 2 我想解释的行C作为坐标I 样本I在这些坐标上使用某种插值 双线性可能适合我的用例 并将结果值存储在新的张量中P 维度为无 即一维 条目数量为C有行 使用 Tens
  • Python 字典的底层哈希数据结构

    我正在构建一个非常大的字典 并且正在执行许多检查以查看键是否在结构中 然后添加它是否唯一或如果相同则增加计数器 Python 使用一个哈希数据结构存储字典 不要与加密哈希函数混淆 查找的时间复杂度为 O 1 但如果哈希表已满 则必须重新哈希