跳转到主要内容

Python字典对象永久按值排序。

项目描述

跳转字典是一个永久按值排序的Python字典。此软件包提供了一个由C编写且具有广泛测试套件的快速、惯用实现。

该数据结构在内部使用跳表

一个示例用法是排行榜,其中跳转字典提供了对每个用户的分数和排名的对数访问,以及从任何节点向任一方向的效率迭代。

与Python 2.7+和Python 3.3+兼容。

用法

跳转字典的工作方式与正常字典相同,但它仅映射到浮点值。

from skipdict import SkipDict

skipdict = SkipDict(maxlevel=4)

skipdict['foo'] = 1.0
skipdict['bar'] = 2.0

SkipDict 可以选择接受一个字典或一系列 (key, value) 对。

skipdict = SkipDict({'foo': 1.0, 'bar': 2.0})
skipdict = SkipDict(('foo', 1.0), ('bar', 1.0), ('bar', 1.0))

请注意,重复项会自动汇总为总和。为了说明这一点,我们可以计算文本中字母的出现次数

skipdict = SkipDict(
    (char, 1) for char in
    "Everything popular is wrong. - Oscar Wilde"
)

# The most frequent letter is a space.
skipdict.keys()[-1] == " "

跳转字典按值排序,这意味着迭代和标准映射协议方法(如 keys()values()items())按排序顺序返回项。

这些方法都扩展了可选的范围参数 minmax,它们基于值限制迭代。此外,迭代器对象支持项和切片协议

>>> skipdict.keys(min=2.0)[0]
'bar'
>>> skipdict.keys(max=2.0)[1:]
['bar']

请注意,这些方法始终返回一个迭代器。使用 list 将其扩展为序列

>>> iterator = skipdict.keys()
>>> list(iterator)
['bar']

index(value) 方法返回第一个具有确切所需值的键。如果找不到该值,则引发 KeyError 异常。

>>> skipdict.index(2.0)
'bar'

替代方案

Francesco Romani 编写了 pyskiplist,它还提供了 CPython 中跳表数据结构的实现。

Paul Colomiets 编写了 sortedsets,这是一个纯 Python 实现的库。随机测试用例来自这个包。

许可证

版权(c)204 年 Malthe Borch <mborch@gmail.com>

本软件在 BSD 许可证下提供“原样”。

变更

1.0 (2014-09-26)

  • 初始公开发布。

项目详情


下载文件

下载适用于您平台的应用程序文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

skipdict-1.0.tar.gz (16.6 kB 查看哈希值)

上传时间

由支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面