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
是否有可能更有效地做到这一点?
答案 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])
这将为您提供每个后缀的所有结果。您可以以相同的方式存储密钥而不是值,然后链接到查找。
在任何情况下,字典键的散列查找都非常便宜,因此最好使用所需的键(即后缀)将数据缓存在字典中,而不是循环遍历每个执行字符串的键。