跳转到主要内容

具有别名和属性访问功能的强大字典子类

项目描述

PyPI - Package Version PyPI - Python Version PyPI - License CircleCI Codecov

WHAT

Lexicon是一个简单的Python dict 子类集合,提供额外的功能

  • AliasDict,一个支持简单和复杂键别名的字典

    • 将单个键别名为另一个键,例如 mydict['bar'] 指向 mydict['foo'],读写都指向。

    • 将单个键别名为其他键的列表,仅限写入,例如使用 active_groups = AliasDict({'ops': True, 'biz': True, 'dev': True, 'product': True}),可以创建一个别名为 'tech',映射到 ('ops', 'dev'),然后例如 active_groups['tech'] = False

    • 别名是递归的:指向另一个别名的别名将表现得好像它指向另一个别名的目标。

  • AttributeDict,支持属性读写访问,例如 mydict = AttributeDict({'foo': 'bar'}) 显示 mydict.foomydict.foo = 'new value'

  • Lexicon,是上述两个的子类,同时表现出这两组行为。

HOW

  • pip安装lexicon

  • 从lexicon导入Lexicon (或其超类之一)

  • 根据需要使用。

如果您有源代码库的克隆,可以像这样运行测试

  • pip install -r dev-requirements.txt

  • inv test

API

AliasDict

在所有示例中,'myalias' 是别名,'realkey' 是“真实”的非别名键。

  • alias(from_='myalias', to='realkey'):将别名 myalias 映射到 realkey,以便 d['myalias'] 在读取和写入时都表现得像 d['realkey']

    • from_ 是第一个关键字参数,但通常可以省略并仍然可以正常读取。以下示例说明了这种用法。以下详细说明了别名如何影响其他字典操作。

  • alias('myalias', to=('realkey', 'otherrealkey')):将别名 myalias 映射到 realkeyotherrealkey。正如您可能预料的那样,这仅对写入有效,因为无法保证所有别名目标都包含相同的值。

  • unalias('myalias'):移除 myalias 的别名;对 myalias 的任何后续读取/写入都将像正常字典一样表现。

  • 'myalias' in d (也称为 __contains__):当给定别名时返回 True,因此如果 myalias 是其他键的别名,则字典成员测试将表现得好像 myalias 已设置。

  • del d['myalias'] (也称为 __delitem__):这实际上变成了 del d['realkey'] – 要删除别名本身,请使用 unalias()

  • del d['realkey']:删除实际的键/值对(即它调用 dict.__del__),但不会触及任何指向 realkey 的别名。

    • 因此,“悬空”的指向不存在键的别名在访问时将引发 KeyError,但如果稍后重新填充目标键,则将继续工作。

注意事项

  • 由于单键/多键的双重性,AliasDict 无法在别名时尊重非字符串类型的键(它必须测试 isinstance(key, basestring) 来区分字符串和非字符串可迭代对象)。

    • AliasDict 实例当然可以使用非字符串键,只是不能将它们用作别名目标。

AttributeDict

  • d.key = 'value' (也称为 __setattr__):直接映射到 d['key'] = 'value'

  • d.key (也称为 __getattr__):直接映射到 d['key']

  • del d.key (也称为 __delattr__):直接映射到 del d['key']

  • “真实”或现有属性与属性作为字典键之间的冲突始终会导致真实属性获胜。因此,无法使用属性访问来访问例如 d['get']

Lexicon

Lexicon 子类首先从 AttributeDict 继承,然后是 AliasDict,最终结果是属性访问将尊重别名。例如。

定义 d = Lexicon(),d.alias(‘myalias’,to=’realkey’),d.myalias = ‘foo’ 打印 d.realkey # 打印‘foo’

项目详情


下载文件

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

源分布

lexicon-2.0.1.tar.gz (9.2 kB 查看散列值)

上传时间

构建分布

lexicon-2.0.1-py2.py3-none-any.whl (6.5 kB 查看散列值)

上传时间 Python 2 Python 3

由以下提供支持