【发布时间】:2015-08-05 19:33:04
【问题描述】:
我有一个字典,它的键来自共享相同前缀的集合,如下所示:
d = { "key1":"valA", "key123":"valB", "key1XY":"valC",
"key2":"valD", "key2-22":"valE" }
给定一个查询字符串,我需要查找与以该前缀开头的键关联的所有值,例如对于query="key1",我需要得到["valA", "valB", "valC"]
我下面的实现可以工作,但是对于大量查询来说太慢了,因为字典 d 有大约 30,000 个键,并且大多数键的长度超过 20 个字符:
result = [d[s] for s in d.keys() if s.startswith(query)]
有没有更快/更有效的方法来实现这一点?
【问题讨论】:
-
我不这么认为 - 键是散列的,这意味着
key1和key12的键在查找表中可能具有完全不同的表示形式。 -
@PadraicCunningham 除非是
Python3,否则keys实际上会返回一个迭代器,如果我没记错的话.. 就像Python2的ikeys -
如果你想要效率,那就选择数据库引擎(例如 Mysql),这些引擎旨在尽可能高效地检索数据。
-
让我们知道哪种方法在您的情况下更快——您可以post your own answer with the comparison
标签: python performance dictionary lookup startswith