散列字典和列表
hashable_collections的Python项目详细描述
关于
此库允许将词典和列表用作 字典。换言之,它使它们可以散列。
而可变对象(列表、字典)不应设为散列 一般来说,程序员不应该滥用这种能力(你do 在投入生产之前测试你的代码,不是吗?).AN公司 显式使生成的哈希对象 为了方便起见,下面提供了不可变项。
有一些用例-例如,当试图通过 与NetworkX相同的键不同 节点,或者当您希望在 进行映射而不是调用复杂的标识 函数-这些函数可能有用并减少样板代码。
用法
>>> from hashable_collections.hashable_collections import hashable_dict >>> hashed_dict = hashable_dict({'name':'foo'}) >>> from hashable_collections.hashable_collections import hashable_list >>> hashed_list = hashable_list(['bar',1]) >>> output = {hashed_dict:0,hashed_list:1} >>> output {{'name':'foo'}: 0, ['bar', 1]: 1}
这些散列对象仍然保持可变-换句话说,它是 仍然可以分配hashed_dict['squiggle'] = 'squiggle'和 让它在没有问题的情况下执行。散列将相应地改变, 有效地使它成为一个不同于以前的对象。
或者,可以对此处定义的对象进行子类化并重写 方法__setitem__,以确保生成的哈希值 字典/列表是不可变的:
class immutable_hashable_dict(hashable_dict): def __setitem__(self,key,value): raise ValueError('Immutable hashable dicts do not let you change values inside your dictionary.') class immutable_hashable_list(hashable_list): def __setitem__(self,key,value): raise ValueError('Immutable hashable lists do not let you change valus inside your list.')
注意事项
以下是可能出现的已知问题列表 技术。
- 创建副本:如果s是hashable_dict,则 m = s然后更改m[0],对应的值为 s[0]也已更改。{ 1 哈希dict或哈希list到另一个对象,除非 当然第二个对象不会改变。
安装
pip install hashable_collections