如何对 LARGE 字典进行排序

2024-06-06

我有一个 python 脚本,正在处理一个大(~14gb)文本文件。我最终得到了一个键和值的字典,但是当我尝试按值对字典进行排序时出现内存错误。

我知道字典太大,无法加载到内存中然后进行排序,但我该如何实现这一点呢?


您可以使用有序键/值存储,例如wiredtiger、leveldb、bsddb。它们都支持使用自定义排序功能的有序键。 leveldb 是最容易使用的,但如果你使用 python 2.7,bsddb包含在 stdlib 中 https://docs.python.org/2/library/bsddb.html。如果您只需要字典顺序排序,您可以使用原始hashopen打开持久排序字典的函数:

from bsddb import hashopen


db = hashopen('dict.db')
db['020'] = 'twenty'
db['002'] = 'two'
db['value'] = 'value'
db['key'] = 'key'

print(db.keys())

这输出

>>> ['002', '020', 'key', 'value']

不要忘记在工作后关闭数据库:

db.close()

请注意 hashopen 配置可能不适合您的需求。在这种情况下,我建议您使用leveldb,它有一个简单的API或wiredtiger以提高速度。

要在 bsddb 中按值排序,您必须使用复合键模式 or 关键组成。归根结底是创建一个字典键来保留您要查找的顺序。在此示例中,我们首先将原始 dict 值(以便首先出现小值)与原始 dict 键打包(以便 bsddb 键是唯一的):

import struct
from bsddb import hashopen

my_dict = {'a': 500, 'abc': 100, 'foobar': 1}

# insert
db = hashopen('dict.db')
for key, value in my_dict.iteritems():
    composite_key = struct.pack('>Q', value) + key
    db[composite_key] = ''  # value is not useful in this case but required
db.close()


# read
db = hashopen('dict.db')
for key, _ in db.iteritems():  # iterate over database
    size = struct.calcsize('>Q')
    # unpack
    value, key = key[:size], key[size:]
    value = struct.unpack('>Q', value)[0]
    print key, value
db.close()

这会输出以下内容:

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

如何对 LARGE 字典进行排序 的相关文章

  • Python 解码 JSON 中的嵌套 JSON

    我正在处理一个 API 不幸的是它返回了格式错误 或 奇怪的格式 而是 感谢 fjarri JSON 但从积极的一面来看 我认为这可能是我学习一些有关递归以及JSON 这是我用来记录锻炼的应用程序 我正在尝试制作备份脚本 我可以很好地收到
  • ResultSet 对象没有属性“find_all”

    当我抓取一个网页时 我总是遇到一个问题 AttributeError ResultSet 对象没有属性 find 您可能将项目列表视为单个项目 当您打算调用 find 时 您是否调用了 find all 谁能告诉我如何解决这个问题 我的代码
  • 设置面积图 openpyxl 的透明度(alpha)

    我想使用 openpyxl 设置面积图背景的透明度 我的图表代码是 from openpyxl drawing fill import PatternFillProperties ColorChoice c2 AreaChart c2 gr
  • Keras 中的 load_model 和 Lambda 层

    如何加载具有 lambda 层的模型 这是重现行为的代码 MEAN LANDMARKS np load data mean shape 68 npy def add mean landmarks x mean landmarks np ar
  • 当鼠标悬停时使用 matplotlib 注释绘图的线条[重复]

    这个问题在这里已经有答案了 我想在鼠标悬停时在绘图上注释不同的线 这里用点进行相同的操作当鼠标悬停在 matplotlib 中的某个点上时可以显示标签吗 https stackoverflow com questions 7908636 p
  • url 查询中的字符 %7D 意味着什么?

    如果我使用 url 访问我的 web 应用程序 vi 5907399890173952 html 然后它就可以工作了 但是当我查看日志文件时 googlebot 会尝试访问一个类似的网址 该网址会生成异常 vi 59073998901739
  • 尝试打开 Excel 时出现“KeyError:“存档中没有名为“xl/sharedStrings.xml”的项目”

    我正在尝试使用 Python 脚本将数据导入 PowerBi 以便我可以安排它定期刷新数据 我面临着从 Excel 文件获取数据并收到错误的挑战 KeyError 没有名为 xl sharedStrings xml 的项目在档案中 导入时
  • ibapi nextValidId 并不总是被调用

    我构建了一个小型 ibapi python 应用程序来运行一些策略 同时注意保持与 tws 的连接 如果 tws 处于非活动状态 python 应用程序将启动并等待 并在 tws 启动时连接到 tws 但这是我的问题 nextValidId
  • 如何从数据存储区刷新 NDB 实体?

    我希望能够在我的代码调用的测试中断言Model put 对于已修改的实体 不幸的是 似乎正在进行一些缓存 例如以下代码 from google appengine ext import ndb class MyModel ndb Model
  • 如何设置 pandas DataFrame _repr_html_ 方法的默认样式?

    我有一个 pandas DataFrame 其中有一列是 url 并且我编写了以下格式化程序以将其作为链接呈现在我的笔记本中 def make clickable val target blank to open new window re
  • 重置Keras模型的所有权重

    我希望能够重置整个 Keras 模型的权重 这样我就不必再次编译它 编译模型目前是我的代码的主要瓶颈 这是我的意思的一个例子 import tensorflow as tf model tf keras Sequential tf kera
  • 如何向 Iron Python 添加模块?

    我一直在尝试使用 C Visual Studio 执行以下 Python 代码 graphcreater py 我通过 NuGet 包管理器添加了 IronPyton 2 7 7 和 IronPython StdLib 2 7 7 一旦我运
  • Python 中 Javascript 的 reduce()、map() 和 filter() 的等价物是什么?

    Python 的等价物是什么 Javascript function wordParts currentPart lastPart return currentPart lastPart word Che mis try console l
  • 使用 Python for PyQt WebEngine 授予对 Cam & Mic 的访问权限

    我正在构建一个从 Python 调用的简单 Web 应用程序 我正在使用下面的代码 加载此页面时 以编程方式授予对摄像头和麦克风的访问权限的最简单方法是什么 我只在网上找到了 C 示例 无法找到在 Python 代码中执行此操作的方法 fr
  • 从线程队列中获取所有项目

    我有一个线程将结果写入队列 在另一个线程 GUI 中 我定期 在 IDLE 事件中 检查队列中是否有结果 如下所示 def queue get all q items while 1 try items append q get nowai
  • Python Blowfish 加密

    由于我对 Java 的了解不完整 我正在努力将此加密代码转换为 Python 代码 两者应该得到完全相同的结果 帮助将不胜感激 Java函数 import javax crypto Cipher import javax crypto sp
  • pandas 数据帧和聚合中的行明智排序

    我在 pandas dataframe df 中有一个表 col1 col2 count 12 15 3 13 17 5 1 36 4 15 12 7 36 1 4 等等 我想要的是将 12 和 15 和 15 和 12 等计算值视为相同
  • 使用 Python 和 lxml 从 HTML 中删除类属性

    Question 如何使用 python 和 lxml 从 html 中删除类属性 Example I have p class DumbClass Lorem ipsum dolor sit amet consectetur adipis
  • Python:正则表达式 findall

    我使用 python 正则表达式从给定字符串中提取某些值 这是我的字符串 mystring txt sometext somemore text here some other text course course1 Id Name mar
  • 命名空间与常规包

    命名空间 Python 包之间有什么区别 没有 init py 和一个常规的Python包 有一个 init py 特别是当 init py普通包裹是空的吗 我很好奇 因为最近我忘记了 init py在我制作的包中 我从未注意到任何问题 事

随机推荐

  • 了解 IServiceProvider 和 QueryService

    谁能解释一下背后的想法IServiceProvider and QueryService 我不明白服务是什么以及它与其他类型的对象或接口有何不同 我看到的解释很少 主要是一些评论here https learn microsoft com
  • 使用 jQuery 选择焦点文本在 Safari 和 Chrome 中不起作用

    我有以下 jQuery 代码 类似于这个问题 https stackoverflow com questions 480735 在 Firefox 和 IE 中工作 但在 Chrome 和 Safari 中失败 没有错误 只是不起作用 有解
  • Jenkins - 配置 Jenkins 以轮询 SCM 中的更改

    我正在与 jenkins 合作 当 svn 存储库发生更改时 我想运行 Maven 目标 我附上了一张我当前配置的图片 我知道每 5 分钟检查一次存储库是疯狂的 我想只有当有新的变化时才运行它 但我找不到方法 无论如何 它不会检查存储库 我
  • 服务器未配置 RPC

    查找我的工作历史 发现以下错误 06 18 2018 00 00 01 MBS Lojas ExportaMR OutrasLojas Error 1 WIN VRT 01 SQL2008 MBS Lojas ExportaMR Outra
  • 使用数组参数创建 bash 选择菜单

    我有一个函数叫做createmenu 该函数将接受一个数组作为第一个参数 第二个参数是数组的大小 然后我想使用该数组的元素创建一个选择菜单 这是我到目前为止所拥有的 使用给定数组创建菜单 createmenu echo 1 echo Siz
  • shared_ptr 的原始指针构造函数是错误的吗?

    事后看来 鉴于make shared would shared ptr是否有一个采用原始指针的构造函数 如果它是在 C 11 中引入的 是否有强有力的论据或用例支持此构造函数 它将避免有据可查的陷阱异常安全 https herbsutter
  • 最大模式长度 fpgrowth apache Spark

    我正在尝试使用 Spark Scala 运行关联规则 我首先创建一个 FPGrowth 树并将其传递给关联规则方法 但是 我希望添加最大模式长度参数 以限制我想要在左侧和右侧的项目数量 我只想要项目之间的一对一关联 val model ne
  • 为什么在此实例中 System.MidpointRounding.AwayFromZero 不进行舍入?

    在 NET 中 为什么System Math Round 1 035 2 MidpointRounding AwayFromZero 产量 1 03 而不是 1 04 我觉得我的问题的答案就在标有 来电者须知 的部分中http msdn m
  • 更改 TextArea 单词的颜色

    有没有办法改变文本区域中某些单词的颜色 例如 路上有三只负鼠 我想把 负鼠 染成红色 qooxdoo 确实使用本机 TextArea 因此它取决于本机 TextArea 功能 由于 TextAreas 不支持该功能 因此我们对此无能为力 另
  • 如何配置和调整 Akka 调度程序

    我正在查看这里的文档 http doc akka io docs akka 2 3 3 java dispatchers html http doc akka io docs akka 2 3 3 java dispatchers html
  • C++ 的隐藏特性? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我是否需要在 WCF DataContract 中公开构造函数才能使其在客户端上的对象实例化期间工作?

    我在 WCF 服务中有一个类 我们称之为A A是一个数据协定 其中包含另一个自定义对象的集合作为其数据成员之一B 为了避免客户端出现空引用问题 我实例化了BList在构造函数中像这样 DataContract public class A
  • java.util.Scanner.throwFor(Scanner.java:862) 处的线程“main”java.util.NoSuchElementException 异常

    我真的不明白问题出在哪里 这是我收到的错误 javac Palindrome java java Xmx128M Xms16M Palindrome Enter your word Exception in thread main java
  • 如何解决 STS 启动时出现“无法找到用于堆栈映射生成的 Asm”错误?

    我正在尝试使用Spring工具套件3 8 3在 Ubuntu 16 04 上 启动后我收到此错误 期间发生内部错误 初始化 Java 工具 详细消息 在 初始化 Java 工具 期间发生内部错误 无法 找到用于堆栈图生成的 Asm 寻找 a
  • JSF ConvertDateTime 与数据表中的时区

    尝试输出数据表中的项目列表 如下所示
  • GameKit 蓝牙传输问题

    我正在尝试使用 GameKit 框架通过蓝牙发送文件 我遇到的问题是我一次只能发送一个 NSData 对象 但我需要将其保存在另一端 如果不知道文件名 这显然是不可能的 但我不知道如何传输它 我尝试将其转换为字符串NSData data N
  • 有没有一种方法可以像结果的开始片段一样工作?

    我目前在叠加层中有一个片段 这是用于登录服务的 在手机应用程序中 我想在叠加层中显示的每个步骤都是它们自己的屏幕和活动 登录过程分为 3 个部分 每个部分都有自己的活动 通过 startActivityForResult 调用 现在我想使用
  • 设置操作项背景 ActionBarSherlock

    我一直在尝试创建自己的行动项目 但这对我来说是不可能的 我想做的是创建一个自定义操作项布局 例如颜色背景 例如 拇指 操作栏 我只想更改我的一项活动的操作项 我一直在玩操作菜单项的 android icon 和 android action
  • 以间隔对包含 np.nan 的值进行分组

    我有一个包含零 一和 np nan 的 pandas 系列 import pandas as pd import numpy as np df1 pd Series 0 0 0 0 0 1 1 1 0 0 0 np nan np nan 1
  • 如何对 LARGE 字典进行排序

    我有一个 python 脚本 正在处理一个大 14gb 文本文件 我最终得到了一个键和值的字典 但是当我尝试按值对字典进行排序时出现内存错误 我知道字典太大 无法加载到内存中然后进行排序 但我该如何实现这一点呢 您可以使用有序键 值存储 例