问题描述
pygtrie.PrefixSet的工作方式如下:
ps = pygtrie.PrefixSet()
term = 'TERM'
ps.add(term)
term in ps
True
term + 'arbitrary postfix' in ps
True
我需要的是具有相似逻辑的地图。例如:
pm = PrefixMap()
pm[term] = 'Value'
pm[term + 'postfix']
'Value'
我不确定pygtrie或任何库中是否有这样的地图。
如果有一种有效的方法可以知道在contains运算符返回True时添加到PrefixSet中的原始前缀是什么,那也很好。
解决方法
研究了PrefixSet的实现,有一个Trie类可以解决问题
In [32]: tr = pygtrie.Trie()
In [34]: term2
Out[34]: 'Some Term'
In [35]: term3 = term2+ 't'
In [36]: term3
Out[36]: 'Some Termt'
In [37]: tr[term2:] = 'VALUE'
In [48]: tr.shortest_prefix(term3)
Out[48]: (('S','o','m','e',' ','T','r','m'): 'VALUE')
In [49]: tr.shortest_prefix(term3)[1]
Out[49]: 'VALUE'