Skip to main content
 首页 » 编程设计

Python:嵌套字典之如果键不存在则创建,否则求和 1

2025年05月04日17mfryf

场景
我正在尝试计算一个单词在一个句子中出现的次数,以获得一个句子列表。 每个句子都是一个单词列表。
我希望最终的字典对整个语料库中的每个单词都有一个键,第二个键表示它们出现的句子,值是它在其中出现的次数。

当前解决方案
以下代码可以正常工作:

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}}