Python中列表的高效持久存储

时间:2015-06-13 18:45:14

标签: python sqlite persistent-storage

我有一个(键,值)映射,对于每个键,我有一个相当大的异构列表列表(〜最多约250个项目)。每个列表都是字符串和数字的混合,我可能想要迭代。关键是一个字符串。如果我想存储这样一个包含数千个这样的(密钥,值)对的列表,以便有效地检索哪些是最好的选择?如果我使用sqlite,那么我需要为每个键创建一个表,然后将列表映射到数据库中的各个记录。如果目标是快速检索特定密钥的列表列表,是否有更好和更有效的选项? 这是一个简短的例子。说动物是列表列表的键映射。示例数据如下所示:

 animals = { 
    "Lion" : [["Siberian", 203, "Tanzania", 123.56], ["Russian", 321, "Timbktu", 23423.2]],
    "Tiger: [["White", 121, "Australia", 1211.1], ["Indian", 111, "India", 1241.5]]
  }

所以我希望能够坚持这个数据结构,并能够通过动物的名称(总是唯一的)快速索引,并获得我关心的特定动物的列表列表。如果每个动物信息中的列表具有固定长度和固定字段,我是否可以某种方式利用该功能来提高效率?

3 个答案:

答案 0 :(得分:2)

正如Blender在评论中指出的那样,泡菜是一个合理的选择。但请确保不要使用原始版本,而是使用基于C的cPickle。或者,考虑dill

答案 1 :(得分:1)

我会建议一个快速的JSON库。在线有几种速度比较表明JSON可以比pickle快或更快。例如检查这个: http://lvsl.github.io/2011/12/28/python-serialization-benchmark.htmlhttps://blog.hartleybrody.com/python-serialize/

有几种JSON序列化替代方案,同样,还有一些在线比较,例如: https://medium.com/@jyotiska/json-vs-simplejson-vs-ujson-a115a63a9e26

我建议调查ujson,这似乎非常快,并且有一个很大的优势,例如pickle,检查数据非常容易,因为它们以人类可读的格式保存。另一方面pickle将更容易使用自定义类型,尽管您仍然可以为JSON的自定义类型定义自定义编码器。总的来说,如果你更关心人类的可读性,那就选择JSON吧,如果真正重要的是选择JSON,那么自定义类型的代码就会少一些。

答案 2 :(得分:0)

根据您的需要,您可能需要考虑REDIS这是一个很好的关键:价值数据库解决方案。这个tutorial提供了相对快速的介绍。