Kids数据操作助手。
项目描述
kids.data 是一个Python库,提供数据管理助手。
它是“Kids”库(即“保持简单”)的一部分。
成熟度
此代码处于alpha阶段。它尚未在Windows上测试。API可能会更改。这更像是持续反思的草稿。
我应该补充的是,这可能还没有准备好展示。尽管如此,这些函数中的许多在项目中每天都会使用,我厌倦了为每个项目重写它们。
特性
使用 kids.data
您将有一个用于模糊匹配元素的匹配库
一个格式化概念,帮助您将任何类型的数据格式化为另一种类型
一种在命令行上显示记录表的方法
一些日常缺失的操作集合元素的功能
安装
由于 kids.data 可在PyPI上获得,因此您无需下载代码的GIT版本。因此,您应该能够运行
pip install kids.data
如果您已下载了GIT源代码,则可以通过传统方式安装当前版本
python setup.py install
如果您没有GIT源代码,但想从GitHub获取最新master或分支,您也可以
pip install git+https://github.com/0k/kids.data
甚至选择特定的修订版(分支/标签/提交)
pip install git+https://github.com/0k/kids.data@master
用法
mdict
mdict 是通过解析键一次访问嵌套字典,请查看此
>>> from pprint import pprint as pp >>> from kids.data.mdict import mdict >>> d = mdict({'a': {'b': {'y': 0}}, 'x': 1}) >>> d['a.b.y'] 0 >>> d.get('a.b.z', 3) 3 >>> d['a.b'] m{'y': 0}
您可以将您的mdict配置为使用“/”,如果需要更多,您可以构建自己的键分词器来将字符串分解成标记。
>>> from kids.data.mdict import CharTokenizer >>> d = mdict({'a': {'b': {'y': 0}}, 'x': 1}, CharTokenizer('/')) >>> d['a/b/y'] 0
当然,设置项的工作方式相同。
>>> d['a/b/z'] = 2 >>> d m{'a': {'b': {'y': 0, 'z': 2}}, 'x': 1}
并且删除项。
>>> del d['a/b'] >>> d m{'a': {}, 'x': 1}
请注意,即使有转义字符或空键,分词器也非常稳定。
>>> d[r'a/b\/c//d'] = 9 >>> d m{'a': {'b/c': {'': {'d': 9}}}, 'x': 1}
而将键/值展开是通过flat属性完成的。
>>> pp(d.flat) {'a/b\\/c//d': 9, 'x': 1}
如果您只想在嵌套字典中使用一次,所有函数都可供使用。
>>> from kids.data.mdict import mset, mget, mdel >>> dct = {'a': {'b': {'y': 0}}, 'x': 1} >>> mget(dct, 'a.b.y') 0 >>> mset(dct, 'a.b.z', 2) >>> pp(dct) {'a': {'b': {'y': 0, 'z': 2}}, 'x': 1} >>> mdel(dct, 'a.b') >>> pp(dct) {'a': {}, 'x': 1}
图形
graph提供了一组用于处理图形的功能。以无关的方式,这意味着您可以以任何您想要的格式存储您的图形。您需要做的只是提供一个函数来获取相关节点。
使用cycle_exists函数的示例
>>> from kids.data.graph import cycle_exists >>> graph = {1: [2, 3], 2: [1]} >>> get_children = lambda n: graph.get(n, []) >>> cycle_exists(1, get_children) True >>> cycle_exists(3, get_children) False
由于节点3是叶子节点,因此没有从它开始的循环。
您可以获取一组元素(叶子是一个没有子节点的最终节点)的leafage。这个leafage是从给定元素可以到达的所有叶子。
>>> from kids.data.graph import leafage >>> list(leafage([1, 4], get_children)) [3, 4]
很棒的是reorder,它将尝试对给定列表进行最小更改,但会交换元素以保证没有依赖性问题,这意味着子节点将出现在父节点之前。这对于加载依赖于其他模块的模块非常有用。
>>> from kids.data.graph import reorder >>> graph = {2: [1], 3: [2]} >>> reorder([1, 3, 2], get_children) [1, 2, 3]
dct
合并字典应该是Python的基础功能之一,但它缺失了很多人(参见关于非原地合并字典的stackoverflow问题关于合并字典非原地)。
您可以使用merge将多个字典合并成一个。
>>> from pprint import pprint >>> from kids.data.dct import merge >>> pp(merge({'a': 1}, {'a': 2, 'b': 1}, {'c': 3})) {'a': 2, 'b': 1, 'c': 3}
贡献
欢迎任何建议或问题。非常欢迎推送请求,请查看指南。
推送请求指南
您可以发送任何代码。我会查看它,并将其集成到代码库中,并将您作为作者留下。这个过程可能需要时间,并且如果您遵循以下指南,将花费更少的时间。
使用PEP8或pylint检查您的代码。尽量保持80列宽。
按最小的关注点分隔您的提交。
每次提交都应通过测试(以允许轻松的二分查找)。
每个功能/错误修复提交应包含代码、测试和文档。
优先考虑对排版或代码外观进行小的更改的提交。这些应在提交摘要中用!minor标记。
提交消息应遵循gitchangelog规则(检查git日志以获取示例)。
如果提交修复了问题或完成了功能实现,请在摘要中说明。
如果您对这里没有回答的指南有任何问题,请检查当前的git log,您可能会找到以前的提交,它将向您展示如何处理您的问题。
许可证
版权(c)2015 Valentin Lab。
根据BSD许可证许可。
变更日志
0.0.5 (2015-03-04)
新功能
添加了MultiDictReader类,允许从多个字典中读取。 [Valentin Lab]
这提供了一种有趣的延迟评估合并字典的方法。此外,多深度字典可以方便地合并。
添加了AttrDictAbstract,有助于从小的方法子集创建attr-dict模式。 [Valentin Lab]
引入了DictLikeAbstract,可以从小的子集快速编写完整的字典类似API。 [Valentin Lab]
添加了untokenize概念,它将撤销tokenize工作。 [Valentin Lab]
.items()不再展开,请使用.flat。
用.flat属性替换了由.items()完成的项展开。
在这个过程中,添加了 .keys()。
字典现在通过引用传递,mdict 为它提供了扩展的 API。[Valentin 实验室]
[mdict] 清理了代码并提供了一个更一致的 API。[Valentin 实验室]
修复
在迭代 mdict 的键时,这些键没有适当地引用。[Valentin 实验室]
0.0.4 (2015-02-06)
新功能
[dct] 添加了 deep_copy 快捷方式。[Valentin 实验室]
这是为了获取所有有用的字典相关内容,而无需了解所有所需的包。并且遵循 pep8 规范在变量/函数名上(即:deep_copy 而不是 deepcopy)。
[dct] 添加了 merge 用于合并字典。[Valentin 实验室]
0.0.3 (2015-02-05)
新功能
[graph] 添加了 graph 函数。[Valentin 实验室]
[mdict] 添加了 mdict 模式。[Valentin 实验室]
[lib] 添加了 half_split_on_predicate。[Valentin 实验室]
[lib] 为 first 添加了默认参数。[Valentin 实验室]
0.0.2 (2015-01-20)
新功能
支持 Python3 并添加了测试以提高覆盖率。[Valentin 实验室]
[match] 添加了匹配和模糊匹配库。[Valentin 实验室]
[fmt] 在记录行显示中移除了所有尾随空格。[Valentin 实验室]
0.0.1 (2014-05-23)
首次导入。[Valentin 实验室]
项目详情
kids.data-0.0.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6e431b718093f775fb13787d6cd04974a687301d8ca2d5c1c6c567c4827c11b6 |
|
MD5 | d00725103a34fc7dda0ca98c1b255d5f |
|
BLAKE2b-256 | e4a3727f94643bd68c068f2f4fbd22c08042c83c8eb457df850c13f42d747bdf |