一个python字典,其中的键可以是列表、字典、numpy数组等。
bsdict的Python项目详细描述
关于
BSDict是一个Python字典,它支持以下对象作为键:
- 没有
- bool、int、float(包括数学.nan),复杂
- str,字节,bytearray
- 列表,元组,dict,set,frozenset
- 在努比·恩达雷(bool、int、float、complex)。在
在内部,对所有支持的对象都定义了总的字典顺序。然后使用排序数组进行存储,并使用二进制搜索进行元素查找。在
BSDict可以在内存或磁盘(持久存储)中初始化。如果BSDict是在磁盘上初始化的,那么只要客户机应用程序有对它们的任何引用,它们就会存储在内存中。因此,字典可以比可用内存大。在
基本用途
内存字典:
frombsdictimportbsdictimportnumpyasnpdata=bsdict()key={'s1':np.array([1.0,10.0,np.nan])}data[key]=5data
光盘词典:
^{pr2}$记忆
BSDict最初是用来帮助记忆接受复杂数据结构(包括浮点数据)作为参数的函数。(这类函数在数据分析中很常见)这个包包含一个简单的记忆包装器,它使用BSDict缓存结果。在
fromtimeimportsleepfrombsdictimportmemoizercached=memoizer(verbose=True)# Persistent memoization#cached = memoizer(datadir = 'cache', verbose = True)@cacheddefmysum(x,y):print("Computing a challenging math problem...")sleep(1)returnx+yz=mysum(1,2)z=mysum(1,2)
警告
这是第一次正式发布。欢迎报告错误。(不过,包装中有大量的测试服。)
技术说明
支持任意键的一种更简单的方法是对它们进行pickle并将其二进制表示形式存储在字典中。方法上有两个小问题。首先,相同的字典和集合可能会根据它们的组合顺序进行不同的序列化(因此它们需要递归排序)。其次,在多个进程或多台机器上运行的数值算法可能会打破浮点决定论。如果希望将几乎相同的数字视为同一个数字,则可以使用二进制搜索,而序列化则不起作用。再说一次,向量的字典顺序与近似匹配查找不一致,这意味着它通常可以正常工作,但并不总是如此。如果你需要接近匹配的查找,让我知道,我会添加他们作为一个选项。在
- 项目
标签: