使用后缀进行字典搜索

时间:2014-10-15 11:16:43

标签: python algorithm python-2.7

P / S:重复到目前为止提出的问题与前缀相关(无论如何都要感谢) 这个问题是关于后缀的。

使用字典

dic={"abcd":2, "bbcd":2, "abgg":2}

是否可以使用字符串的后缀搜索字典,即,如果给出" bcd",它将返回两个条目

{"abcd":2, "bbcd":2}

一种可能的方式:

dic1={}
for k, v in dic.items():
    if(k.endswith("bcd")):
        dic1[k]=v

是否有可能更有效地做到这一点?

1 个答案:

答案 0 :(得分:0)

对于一个小问题设置你可以用一个简单的列表理解来做到这一点:

suffixed = [v for k, v in dic.items() if k.endswith("bcd")]

然而,这意味着每次查询时都要对字典中的每个项进行子字符串检查。如果大数据集的速度很慢,您可以将原始键的第二个字典作为加速。你必须做一次预先通过:

suffixes = dict ( [ (k[-3:], []) for k in dic1] ) 
for k in dic1:
    suffixes[k[-3:]].append(dic1[k])

这将为您提供每个后缀的所有结果。您可以以相同的方式存储密钥而不是值,然后链接到查找。

在任何情况下,字典键的散列查找都非常便宜,因此最好使用所需的键(即后缀)将数据缓存在字典中,而不是循环遍历每个执行字符串的键。