四处寻找尝试的 python 实现,以便我能够理解它们是什么以及它们如何工作,我遇到了 Justin Peel 的patricia trie并发现它非常有指导意义:它足够简单,对于像我这样的新手来说,可以玩它并且从中学习。
但是,我认为我不明白有些事情:
使用贾斯汀的类 patricia() 因此:
>>> p = patricia()
>>> words = ['foo','bar','baz']
>>> for x in words:
... p.addWord(x)
Run Code Online (Sandbox Code Playgroud)
我得到一个字典,看起来像这样:
>>> p._d
{'b': ['a', {'r': ['', {}], 'z': ['', {}]}], 'f': ['oo', {}]}
Run Code Online (Sandbox Code Playgroud)
addWord() 和 isWord() 按预期工作,但 isPrefix() 显示以下行为让我感到困惑:
>>> p.isPrefix('b')
True
>>> p.isPrefix('f')
True
>>> p.isPrefix('e')
False
Run Code Online (Sandbox Code Playgroud)
不错,符合预期;进而
>>> p.isPrefix('ba')
True
Run Code Online (Sandbox Code Playgroud)
也不错,但是:
>>> p.isPrefix('bal')
True
Run Code Online (Sandbox Code Playgroud)
此外:
>>> p.isPrefix('ballance')
True
>>> p.isPrefix('ballancing act')
True
Run Code Online (Sandbox Code Playgroud)
这里有什么我不明白的吗?
我有几个python脚本,我在字典中存储5-10万字符串键值对,我查询这个字典大约5-10万次.我注意到python dict表现不佳.是否有任何其他实现最适合字符串键.
编辑:
我有两个大的人名列表,我想匹配它们,所以我把其中一个作为参考列表,并尝试对第二个列表中的每个名称应用不同的启发式,以确定是否存在于第一个列表中.因此,我必须在第二个列表中为每个名称查询2-3次.希望,这是有道理的.
我想翻开以下字典:
dictionary = {
4388464: ['getting']
827862 : ['Taruma', 'Varuna']
...
}
Run Code Online (Sandbox Code Playgroud)
成:
dictionary = {
4: {3: {8: {8: {4: {6: {4: {'words': ['getting']}}}}}}}
8: {2: {7: {8: {6: {2: {'words': ['Taruma', 'Varuna']}}}}}}
...
}
Run Code Online (Sandbox Code Playgroud)
这将允许我使用字典:dictionary[8][2][7][8][6][2]['words']而不是:dictionary[827862].