Python字典:如何合并顺序不同的二元组键并累加计数
解决方案:将无序单词对识别为等价键
核心思路是将单词对排序后作为字典的键,这样元素顺序不同的元组会被标准化为同一个键,从而实现等价识别。
一、合并已有字典中的等价键
如果已经有包含无序键的字典,可以通过遍历并标准化键的方式合并计数:
original_dict = {('am', 'and'): 1, ('and', 'am'): 1} merged_dict = {} for pair, count in original_dict.items(): # 对元组排序,生成标准化的等价键 standardized_pair = tuple(sorted(pair)) # 累加计数,不存在则默认0 merged_dict[standardized_pair] = merged_dict.get(standardized_pair, 0) + count print(merged_dict) # 输出: {('am', 'and'): 2}
二、修改循环代码,直接生成等价键的字典
修改原循环逻辑,在生成键之前对单词对进行排序,确保无序对被识别为同一个键:
基础实现
word_pair_freq = {} window = ['am', 'and'] # 替换为你的实际window数据 for word1 in window: for word2 in window: if word1 != word2: # 标准化单词对为排序后的元组 standardized_pair = tuple(sorted((word1, word2))) word_pair_freq[standardized_pair] = word_pair_freq.get(standardized_pair, 0) + 1 print(word_pair_freq) # 输出: {('am', 'and'): 2}
用collections.defaultdict简化代码
如果频繁处理这类计数,使用defaultdict可以省去get方法的判断:
from collections import defaultdict word_pair_freq = defaultdict(int) window = ['am', 'and'] for word1 in window: for word2 in window: if word1 != word2: standardized_pair = tuple(sorted((word1, word2))) word_pair_freq[standardized_pair] += 1 print(dict(word_pair_freq)) # 输出: {('am', 'and'): 2}
内容的提问来源于stack exchange,提问作者Ayesha
相关产品推荐
相关产品推荐

