Skip to main content

Python 中的链接深度字典。

项目描述

粘合剂 圈子CI 文件状态 执照 派皮

LinkedDeepDict

一个轻量级 Python 库,用于管理具有父子关系的嵌套字典。除了作为内置dict类的兼容插入式替代品之外,自我复制的默认工厂使复杂嵌套布局的创建变得轻松。

文档

单击此处阅读文档。

安装

这是可选的,但我们建议您始终创建一个专用的虚拟环境,以避免与您的其他项目发生冲突。创建一个文件夹,在该文件夹中打开一个命令外壳并使用以下命令

>>> python -m venv venv_name

创建环境后,通过键入激活它

>>> .\venv_name\Scripts\activate

可以使用pipPython >= 3.7 从 PyPI 安装该库(在虚拟环境中或全局中):

>>> pip install ldd

词典词典...

在您想使用 a 的每种情况下dict,您都可以使用 aLinkedDeepDict作为替代品,但除了简单字典提供的功能之外, aLinkedDeepDict功能更强大,因为它提供了一种处理嵌套布局的机制。它基本上是一个defaultdict带有自我复制默认工厂的订单。

>>> from ldd import LinkedDeepDict
>>> data = LinkedDeepDict()

ALinkedDeepDict本质上是一个嵌套的默认字典。嵌套是指您可以这样做:

>>> data['a']['b']['c']['e'] = 1
>>> data['a']['b']['d'] = 2

请注意,该对象会一直到最后一个键,而无需显式创建每个级别。发生的情况是,每次 a 中缺少键时data,对象都会创建一个新实例,然后该实例也准备好处理丢失的键或数据。访问嵌套子字典的工作方式类似:

>>> data['a']['b']['c']['e']
1

为了给人一种更 Pythonic 的感觉,它还支持类似数组的索引,因此以下操作是有效的:

>>> data['a', 'b', 'c', 'e'] = 3
>>> data['a', 'b', 'c', 'e']
3

当然,这是我们可以在一行中使用纯 Python 轻松复制的东西,而不需要花哨的东西:

>>> data = {'a' : {'b' : {'c' : {'e' : 3}, 'd' : 2}}}    

关键是我们循环一个纯dict实例,我们得到

>>> [k for k in data.keys()]
['a']    

但是,如果我们在访问字典的键、值或项时使用LinkedDeepDict类和选项,则会发生以下情况:deep=True

>>> [k for k in LinkedDeepDict(data).keys(deep=True)]
['e', 'd']    

我们可以看到,在这种情况下,迭代会遍历键,这些键实际上会保留一些数据,并且不会返回容器本身。如果我们对这些值进行相同的实验,它表明LinkedDeepDict唯一返回数据树的叶子并且行为根本不同:

>>> [k for k in data.values()]
[{'b': {'c': {'e': 3}, 'd': 2}}]    
>>> [k for k in LinkedDeepDict(data).values(deep=True)]
[3, 2]    

重要的是,调用obj.values(deep=True)仍然返回一个生成器对象,这使得它在循环大型数据集时内存高效。

>>> LinkedDeepDict(data).values(deep=True)
<generator object OrderedDefaultDict.values at 0x0000028F209D54A0>    

测试

要运行所有测试,请在项目的根目录中打开控制台并键入以下内容

>>> python -m unittest

依赖项

唯一的依赖是six, 以提供主要 Python 版本 2 和 3 之间的基本连续性。

执照

该软件包在 MIT 许可下获得许可。

项目详情


下载文件

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

源分布

linkeddeepdict-0.0.1b0.tar.gz (14.3 kB 查看哈希

已上传 source

内置分布

linkeddeepdict-0.0.1b0-py3-none-any.whl (12.6 kB 查看哈希

已上传 py3