Если вам нужна определенная стратегия поиска (например, «начальные с 3-мя символами», описанные выше), вы, вероятно, сможете быстро выиграть, создав специальный словарь поиска, основанный на этой идее.
q = {"fork":1, "form":2, "fold":3, "fame":4}
from collections import defaultdict
q1 = defaultdict(dict)
for k,v in q.items():
q1[k[:3]][k]=v
Это позволит вам выполнить поиск типа .startswith
в гораздо меньшем наборе
def getChoices(frag):
d = q1.get(frag[:3])
if d is None:
return []
return [ k for k in d.keys() if k.startswith(frag) ]
Надеюсь, это будет намного быстрее, чем обработка целых 400 000 ключей.