Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用后缀进行词典搜索_Python_Algorithm_Python 2.7 - Fatal编程技术网

Python 使用后缀进行词典搜索

Python 使用后缀进行词典搜索,python,algorithm,python-2.7,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 有没有可能更有效地完成它?对于一个小

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

有没有可能更有效地完成它?

对于一个小问题集,您可以通过简单的列表理解来完成:

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])
这将为您提供每个后缀的所有结果。您可以以相同的方式存储键而不是值,然后链接到查找


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

@simonzack这是关于后缀的,一个完全不同的问题如果你理解尝试,你就会理解如何存储后缀。只存储后缀而不是前缀。@simonzack我知道trie,有支持后缀的trie实现(库)吗?你不需要找到。只需在将字符串放入trie之前和之后反转字符串。@simonzack这是一个用于反转的附加操作。。。