我目前有一本带有嵌套字典的字典。它的长度约为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次比赛后理解力不会中断。
我可以接受任何类型的解决方案(系列,列表,字典,哈希图等),但是目标是:响应时间尽可能短;结果是原始字典的键的列表。
先谢谢您!
答案 0 :(得分:0)
根据this的答案,我发现this链接到名为suffix_trees
的模块。根据那里的描述。
suffix tree是有用的数据结构,用于对文本字符串进行非常强大的搜索。例如,可能可以设计一个Python字典接口,该接口接受键的 substrings ,并返回可能的键列表。非常非常酷的东西。 (我想知道这是否是Perl的
study
函数的功能。)SuffixTree是一个包装,允许Python程序员使用后缀树。
从我看到的结果来看,它不是dict
的子类,因此您需要重新遍历字典以创建SubstringDict
,然后在{{1 }}键。
类似以下内容
dict
注意:我尚未测试此代码,这是一个模型,我离开了我的工作站。因此,请务必检查。
祝你好运!希望对您有帮助