如何通过dict键值方便地过滤dict记录?

2024-05-14 22:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在python应用程序中与rocksdb接口,并在其中存储任意dict。我想我可以用像pickle这样的东西来序列化。但是我需要能够根据记录键的值过滤记录。这里的正确方法是什么?你知道吗


Tags: 方法应用程序序列化记录pickledictrocksdb
2条回答

RocksDB是一个键值存储,键值都是二进制字符串。你知道吗

  1. 如果要按给定的键进行筛选,只需使用Get接口搜索数据库。你知道吗
  2. 如果要按给定的键模式过滤,则必须使用Iterator接口来迭代整个数据库,并使用与模式匹配的键过滤记录。你知道吗
  3. 如果要按值或值模式过滤,仍然需要迭代整个数据库。对于每个键值对,反序列化该值,并检查它是否等于给定值或与给定模式匹配。你知道吗

对于case1和case2,不需要反序列化所有值,只需要反序列化等于给定键或与模式匹配的值。但是,对于3情况,必须反序列化所有值。你知道吗

case2和case3都是低效的,因为它们需要迭代整个密钥空间。你知道吗

您可以配置RocksDB的密钥进行排序,RocksDB对前缀索引有很好的支持。因此,可以有效地进行范围查询和按键前缀查询。查看文档了解详细信息。你知道吗

为了有效地进行值筛选/搜索,您必须使用RocksDB创建一个值索引。你知道吗

假设您有一个名为dict_keys的键列表,还有一个名为big_dict的dict,您只想从dict_keys中过滤出值。您可以编写一个dict理解,在列表中循环,从dict中获取项目(如果它们是这样存在的):

new_dict = {key: big_dict.get(key) for key in dict_keys}

相关问题 更多 >

    热门问题