场景
我正在尝试计算一个单词在一个句子中出现的次数,以获得一个句子列表。 每个句子都是一个单词列表。
我希望最终的字典对整个语料库中的每个单词都有一个键,第二个键表示它们出现的句子,值是它在其中出现的次数。
当前解决方案
以下代码可以正常工作:
dfm = dict()
for i,sentence in enumerate(setences):
for word in sentence:
if word not in df.keys():
dfm[word] = dict()
if i not in dfm[word].keys():
dfm[word][i] = 1
else:
dfm[word][i] += 1
问题
有没有更简洁的方法用 python 来做?
我已经通过了this和 this他们建议使用的地方:
dic.setdefault(key,[]).append(value)
和,
d = defaultdict(lambda: defaultdict(dict))
我认为它们是很好的解决方案,但我不知道如何使它适应我的特定解决方案。
谢谢!
请您参考如下方法:
假设你有这样的输入:
sentences = [['dog','is','big'],['cat', 'is', 'big'], ['cat', 'is', 'dark']]
您的解决方案:
dfm = dict()
for i,sentence in enumerate(sentences):
for word in sentence:
if word not in dfm.keys():
dfm[word] = dict()
if i not in dfm[word].keys():
dfm[word][i] = 1
else:
dfm[word][i] += 1
默认字典整数:
from collections import defaultdict
dfm2 = defaultdict(lambda: defaultdict(int))
for i,sentence in enumerate(sentences):
for word in sentence:
dfm2[word][i] += 1
测试:
dfm2 == dfm # True
#{'dog': {0: 1},
# 'is': {0: 1, 1: 1, 2: 1},
# 'big': {0: 1, 1: 1},
# 'cat': {1: 1, 2: 1},
# 'dark': {2: 1}}
