如何检查字典中是否存在具有特定模式的值?

2024-06-28 19:19:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在字典中找到前N个字符与另一个字符串相同的值。你知道吗

例如:

我想得到前4个字符为“abcd”的所有值并返回其键

string = "abcd"

dict = {'k1' : 'abcd4545', 'k2' : 'abab1234', 'k3' : 'abcd789456'}

结果:应返回k1和k3

我认为可以通过循环字典中的所有值并获得前N个字符来进行比较。你知道吗

但是我需要处理大量数据的字典,有没有更好的方法呢?你知道吗


Tags: 数据方法字符串string字典k2k1dict
3条回答

如果只想执行一次操作,那么除了遍历所有值之外,可能没有其他方法。但是,如果您需要重复执行此操作,并且希望提高时间性能,我建议您在这里进行一些预处理。例如,您可以生成此词典的反向映射,例如。你知道吗

reverse_dict = {v:k for (k,v) in dict} 这里,V可以是k的数组,如{v1 : [k1,k5], v2 : [k3], v3....}

现在,您可以基于上面reverseMap的第一个字母来创建bucket。如果第一个字母仅为英文字母数字,则只有(26+10)个桶。如果你能用两个字母,那就是36*36桶。我说的是Trie数据结构。然后,可以在桶内线性搜索。这可以给你几乎恒定的时间性能与一些额外的内存使用。如果您有大量的数据无法用现代的RAM大小保存,那么您可能需要将这些bucket分布在不同的系统中,并使用相同的技术。这可以极大地提高性能。简单地将线性搜索任务分布在一组机器上也可以在这种情况下工作,在这种情况下,每台机器在完成时返回键[k1,k2。。。[主持人]你最终决定了结果。你知道吗

不,除了迭代值和检查条件之外,没有其他解决方案,循环可以通过列表理解实现:

[k for k, v in dict.items() if v.startswith(string)]

当然,除了解析所有值并测试它们中的每一个值之外,没有其他解决方案,而不需要更多关于数据的信息。你知道吗

没有任何解决方案能比在整个字典中循环做得更好(即做更少的操作),因为您需要解析它们以确保检索所有它们。你知道吗

相关问题 更多 >