首页 > 解决方案 > 计算嵌套列表中的唯一元组

问题描述

我有一个二维数组,其中每个元素都是一对两个标签,例如 ["NOUN", "VERB"],我想计算这些唯一对中的每一个在大型数据集中出现的次数。

到目前为止,我已经尝试使用 defaultdict(int) 和 Counter() 来轻松添加之前未找到的元素,或者如果找到将值增加 1。

dTransition = Counter()
# dTransition = defaultdict(int)

# <s> is a start of sentence tag
pairs = [[('<s>', 'NOUN')], [('CCONJ', 'NOUN')], [('NOUN', 'SCONJ')], [('SCONJ', 'NOUN')]]

for pair in pairs:
      dTransition[pairs] += 1

这不起作用,因为它不接受两个参数。所以我想知道是否有一种简单的方法来检查字典是否已经存在一个二维数组的键,如果存在则将值增加 1。

标签: pythonarrayslistdictionary

解决方案


您需要展平您的列表,因为与列表不同,元组是可散列的。一个简单的选项是使用itertools.chain然后Counter用元组列表构建一个:

from itertools import chain
Counter(chain(*pairs))

输出

Counter({('<s>', 'NOUN'): 1, ('CCONJ', 'NOUN'): 1, 
         ('NOUN', 'SCONJ'): 1, ('SCONJ', 'NOUN'): 1})

推荐阅读