You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python collections的Counter统计多列表单词并生成指定嵌套字典

解决方案:生成单词共现计数字典

嘿,我帮你调整了代码,正好能生成你想要的那种记录单词共现次数的字典。先看修改后的代码:

from collections import defaultdict, Counter

def myFunc(word_lists):
    # 初始化嵌套结构,方便自动处理计数初始化
    co_occurrence = defaultdict(Counter)
    # 先把所有出现过的唯一单词捞出来
    all_unique_words = {word for sublist in word_lists for word in sublist}
    
    for sublist in word_lists:
        # 遍历当前子列表里的每一对不同单词
        for idx, word_a in enumerate(sublist):
            for word_b in sublist[idx+1:]:
                # 互相累加共现次数——毕竟A和B一起出现,双方的计数都要加1
                co_occurrence[word_a][word_b] += 1
                co_occurrence[word_b][word_a] += 1
    
    # 把嵌套的Counter转成普通字典,同时确保所有唯一单词都作为顶级键存在
    final_result = {word: dict(co_occurrence[word]) for word in all_unique_words}
    return final_result

# 测试调用
result = myFunc([['Apple', 'Orange', 'Banana'], ["Banana", "Orange"]])
print(result)

运行这段代码后,输出正好是你想要的格式:

{'Apple': {'Orange': 1, 'Banana': 1}, 'Orange': {'Apple': 1, 'Banana': 2}, 'Banana': {'Apple': 1, 'Orange': 2}}

简单解释下逻辑:

  • 原来的代码只是统计每个子列表内的元素出现次数,没有跟踪不同单词之间的共现关系,所以得换个思路:遍历每个子列表里的每一对单词,只要它们在同一个子列表里出现,就互相给对方的计数加1。
  • 用defaultdict(Counter)是为了省去手动初始化每个单词的计数字典的麻烦,它会自动为新出现的单词创建空的Counter。
  • 最后把嵌套的Counter转成普通字典,是为了让输出格式和你要求的完全一致。

内容的提问来源于stack exchange,提问作者Lucas123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:22:13