使用Python搜索大型嵌套字典

时间:2019-01-24 20:21:32

标签: python dictionary

我目前有一本带有嵌套字典的字典。它的长度约为200万。字典看起来像这样,但这是一个伪造的例子

{ "item 1" : { "name" : "John Doe", "address" : "#1 city, zip, whatever"},
  "item 2" : { "name" : "Jane Doe", "address" : "#2 city, zip, blablabla"},
 ...}

我的任务是获取前n个项,其中嵌套字典中的“地址”字段包含一个字符串,其中n等于10。这必须非常有效,在功能强大的桌面上以ms为单位进行响应。 尝试使用带有异常处理的迭代器进行循环,但速度太慢。 Dict理解会遍历每个元素,因此也很慢。 然后我创建了一个索引字典,其中的键是地址,值是项目列表(原始字典的键)。然后遍历n个项目,然后停止。像这样(dict_2):

{"#1 city, zip, whatever" : ["item 1", "item 5487", ...],
 "#2 city, zip, whatever" : ["item 2", "item 1654654", ...] }
result = []
i = 0
for k,v in dict_2.items():
    if findThis in k:
        i += 1
        result.extend(v)
        if i>= n:
            break

很好,但是我仍然需要一些改进,因为python循环的速度不如我所需。 n次比赛后理解力不会中断。

我可以接受任何类型的解决方案(系列,列表,字典,哈希图等),但是目标是:响应时间尽可能短;结果是原始字典的键的列表。

先谢谢您!

1 个答案:

答案 0 :(得分:0)

根据this的答案,我发现this链接到名为suffix_trees的模块。根据那里的描述。

  

suffix tree是有用的数据结构,用于对文本字符串进行非常强大的搜索。例如,可能可以设计一个Python字典接口,该接口接受键的 substrings ,并返回可能的键列表。非常非常酷的东西。 (我想知道这是否是Perl的study函数的功能。)SuffixTree是一个包装,允许Python程序员使用后缀树。

从我看到的结果来看,它不是dict的子类,因此您需要重新遍历字典以创建SubstringDict,然后在{{1 }}键。

类似以下内容

dict

注意:我尚未测试此代码,这是一个模型,我离开了我的工作站。因此,请务必检查。

祝你好运!希望对您有帮助