我有一个大约50,000个单词的列表,我想在列表中的每个项目上传递一个函数。然后我想将原始单词保存为键,将翻译后的单词保存为字典中的相应值。现在我知道我可以这样做:
translations = {word: translate(word) for word in word_list}
但我认为这需要太长时间。有没有更快的方法可以实现?
答案 0 :(得分:0)
映射函数应该比dict理解更快:
translations = dict(zip(word_list, map(translate, word_list)))
这里发生的是:
word_list
中的每个元素,并返回map
对象zip
对象)设置测试程序后,似乎性能略有改善。这是代码:
from datetime import datetime
def translate(wo):
return wo.upper()
word_list = {str(i):str(i+1) for i in range(50000)}
d = datetime.now()
translations = dict(zip(word_list, map(translate, word_list)))
print(datetime.now() - d)
d = datetime.now()
translations = {word: translate(word) for word in word_list}
print(datetime.now() - d)
经过几次运行后,第二次打印时间总是大于第一次打印时间,这证明了效率。
答案 1 :(得分:0)
如果您只需要很少的值,并且不会遍历dict,那么您可以尝试懒散地进行:
class MyDefaultDict(dict):
def __init__(self, word_iterable, translate):
self.word_set = frozenset(word_iterable)
self.translate = translate
def __missing__(self, key):
if key in self.word_set:
translated = translate(key)
self[key] = translated
return translated
raise KeyError(key)