计算嵌套列表中唯一元组的数量

use*_*872 1 python arrays dictionary list

我有一个二维数组,其中每个元素都是一对两个标签,例如 [“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

Run Code Online (Sandbox Code Playgroud)

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

yat*_*atu 5

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

from itertools import chain
Counter(chain(*pairs))
Run Code Online (Sandbox Code Playgroud)

输出

Counter({('<s>', 'NOUN'): 1, ('CCONJ', 'NOUN'): 1, 
         ('NOUN', 'SCONJ'): 1, ('SCONJ', 'NOUN'): 1})
Run Code Online (Sandbox Code Playgroud)