如何基于列表的列表生成词关联出现频次统计字典?
解决方案
这个需求的核心是遍历每个子列表,对其中的每个单词,统计同子列表内其他单词的出现次数,我们可以通过嵌套循环来实现,步骤清晰且容易理解。
实现代码
# 输入的嵌套列表 word_lists = [['Hello', 'Hi'], ["Hola", "Hi", "Ciao"], ["Ciao", "Hi"]] # 初始化结果字典,所有唯一单词作为键,对应空字典 result = {} # 先收集所有唯一单词 all_words = set(word for sublist in word_lists for word in sublist) for word in all_words: result[word] = {} # 遍历每个子列表 for sublist in word_lists: # 遍历子列表中的每个单词作为当前键 for current_word in sublist: # 遍历子列表中的其他单词,统计频次 for other_word in sublist: if current_word != other_word: # 如果other_word不在当前键的字典里,初始化为0,再加1 result[current_word][other_word] = result[current_word].get(other_word, 0) + 1 print(result)
代码解释
- 初始化结果字典:首先通过集合推导式收集所有唯一单词,为每个单词创建一个空的子字典,用来存储同列表内其他单词的频次。
- 三层循环处理:
- 最外层循环遍历每个子列表;
- 中间层循环以子列表中的每个单词作为当前统计的键;
- 最内层循环遍历子列表中的其他单词,跳过自身后,在当前键的子字典中累加对应单词的计数(用
dict.get()方法可以优雅处理键不存在的情况,默认值为0)。
- 输出结果:运行代码后会得到你期望的字典:
{'Hello': {'Hi': 1}, 'Hi': {'Hello': 1, 'Hola': 1, 'Ciao': 2}, 'Hola': {'Hi': 1, 'Ciao': 1}, 'Ciao': {'Hola': 1, 'Hi': 2}}
如果子列表存在重复单词的场景(比如某个子列表是["Hi", "Hi", "Ciao"]),这个实现也能正确统计——比如该子列表中Hi对应的Ciao计数会加2,Ciao对应的Hi计数会加2,完全符合需求逻辑。
内容的提问来源于stack exchange,提问作者Lucas123
相关产品推荐
相关产品推荐

