我正在尝试创建一个单词字典,其中单词被散列为整数以供进一步处理。我是否可以使用defaultdict
的变体来避免检查if word not in wordid
。这是一个非常大的文件,需要时间有效的方法。
wordid=defaultdict(int)
totaluniquewords = 0
for word in sentencewords:
if word not in wordid:
totaluniquewords+=1
wordid[word]=totaluniquewords
答案 0 :(得分:2)
这是一种更简单,更快捷的方式来获得你想要的东西:
from itertools import count
wordid = dict(zip(set(sentencewords), count(1)))
这使用set
获取sentencewords
中的唯一字词,将每个唯一字词与count()
中的下一个值配对(向上计数) ),并从结果中构造一个字典。
答案 1 :(得分:0)
我可以使用
defaultdict
的变体来避免检查if word not in wordid
吗?
是的,只需将itertools.count().__next__
传递给它的构造函数:
Python2中的 itertools.count().next
>>> from collections import defaultdict
>>> from itertools import count
>>> dct = defaultdict(count().__next__)
>>> dct['anything']
0
>>> dct['test']
1
defaultdict
的第一个参数是可调用的。当您尝试获取不存在的键时,它会在不带参数的情况下调用此可调用对象并返回结果。结果也存储在defaultdict中 - 当您尝试再次获取该项目时,它已经存在,并且您获得与以前相同的值。
itertools.count()
返回从0到无穷大的迭代器。
__next__
是迭代器的方法,它从迭代器中获取下一个元素。
因此,基本上,itertools.count().__next__
是可调用的,每次调用时都会返回下一个自然数。