具有别名和属性访问功能的强大字典子类
项目描述
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.foo 和 mydict.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 映射到 realkey 和 otherrealkey。正如您可能预料的那样,这仅对写入有效,因为无法保证所有别名目标都包含相同的值。
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 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 49a072372e890e88a60f713a297e95788628f2fbae27943b010ae078ed9ab082 |
|
MD5 | 45bfee6c887f0c8b36dfbc0105cee35a |
|
BLAKE2b-256 | 81309ffe4cd08882379174f7dc2f70a5d67c15760a180b8789db9842cbad4ef7 |
lexicon-2.0.1-py2.py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | ba9352053174a0aa7641ddc24b1cace8686a6dc4107d55d20c8996f858a30e74 |
|
MD5 | b69690b12a2ce570e91c2a3b2214ca1b |
|
BLAKE2b-256 | ec63f1fea06f13cfac1d64391175128a6798b69009fae2daa71ebd6ae60dd620 |