一种多向映射,其中任意数目的列扫描用作键。
multidirmap的Python项目详细描述
多方向映射
多向映射,其中任意数量的列可以用作键。
安装
$ pip install multidirmap
快速启动
>>>frommultidirmapimportMultiDirMap>>>crew=MultiDirMap(["character","portrayed_by","role","nicknames"],key_columns=2,data=[["Malcolm Reynolds","Nathan Fillion","Captain",["Mal","Captain Tight Pants"]],["Zoë Washburne","Gina Torres","First Mate"],["Hoban Washburne","Alan Tudyk","Pilot","Wash"]])>>>crew["Malcolm Reynolds"].roleCaptain>>>crew.portrayed_by["Nathan Fillion"].nicknames["Mal","Captain Tight Pants"]
功能
- 所需的列数可以用作映射的键列
- o(1)从任何键列检索
- 通过对内容的任何修改保持内部一致性
- 插入顺序在主键列中保持
- 内置精美的地图打印功能
用例
字典在pyton中无处不在,并且提供了非常有用和快速的 从键到值的映射。有时,一个单一的单向映射不是 但是,当bidict扩展时 此功能到双向映射,multidirmap提供了 类似数组的数据结构,其中任意数量的列可用于o(1) 检索。在其最简单的实现中(2列,其中一列是键 它本质上提供了与dict相同的功能,尽管 额外的开销(不要那样做…)。两列都是键列 会有点像bidict,尽管语法略有不同。但是 {EM1}$MuldiDMAP[EEM]在任何数量的密钥中都更灵活 可以使用非键列。 在pandas数据帧中可以实现类似的效果,尽管 (1)无法确保密钥的唯一性,因此检索可以返回任何数字 行的(2)使用数组结构,因此检索是o(n),对于大型 数组可以得到非常慢的,并且(3)需要安装panda,panda 是一个相当大的库,仅用于此功能。
假设我们想处理元素周期表中的信息,比如
[["H","Hydrogen",1,[1,2,3]],["He","Helium",2,[4,3]],["Li","Lithium",3,[7,6]],...["Og","Oganesson",118,[295,294]]]
其中列表示的符号、名称、原子序数和核子序数 分别是同位素。前三列显然是键的候选者 按定义,列是唯一的。multidirmap允许放置 在一个统一的数据结构中的信息 锂的同位素核子数?“,”的化学元素符号是什么 钾?,或“原子序数为46的元素的名称是什么?”“可以 用一个简单的语法和o(1)检索。任何数量的附加 可以添加键列和非键列。
促使开发这个包的用例涉及struct 模块:对于二进制接口,我需要在(1)之间来回转换 变量类型的字符串表示,(2)整数表示 变量类型的,(3)结构格式字符,和(4)以字节为单位的大小 变量。同样,1-3显然是键列的候选者,4是 非键列。如果没有multidirmap,则必须使用几个单独的dict 提供从一列到另一列所需的每个映射 以确保这些指令在可能的情况下保持一致 变化。
更改日志
0.2.0(2019-07-12)
- 自定义排序
- 重新排序辅助键
0.1.0(2018-07-28)
- pypi上的第一个版本。