一个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并将其二进制表示形式存储在字典中。方法上有两个小问题。首先,相同的字典和集合可能会根据它们的组合顺序进行不同的序列化(因此它们需要递归排序)。其次,在多个进程或多台机器上运行的数值算法可能会打破浮点决定论。如果希望将几乎相同的数字视为同一个数字,则可以使用二进制搜索,而序列化则不起作用。再说一次,向量的字典顺序与近似匹配查找不一致,这意味着它通常可以正常工作,但并不总是如此。如果你需要接近匹配的查找,让我知道,我会添加他们作为一个选项。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何实时生成简单的2D图形?   java如何使用DirectoryStream过滤隐藏文件。滤器   二进制Java BigInteger测试位64位长   java Grails替换onetoone关联中的对象   爪哇七月至SLF4J大桥   java无法解决符号“窗口”错误   java在Mysql中保存NULL而不是HTML文档的文本   java当blackberry OS显示摄像头权限警报,用户点击通话结束(红色)按钮时,如何正确退出blackberry应用程序   二维地图平铺java上的块碰撞问题   java jpa mysql表不存在自动生成不工作   java在按下按钮或失去焦点时切换JDialog可见性   如何将java中的复杂映射序列化为JSON   JavaHadoop2。2.0追加文件发生AlreadyBeingCreatedException   字符串Java printDailyCost方法   feed如何修复java中新闻api的“太多请求”错误   基于字符串的java Android目录层次结构   如果键存在且值不为null,则java放入映射,否则抛出异常   java如何获取cglib代理类实例的字节码?   算法Java中按多个属性对对象进行分组的一般方法