python - 计算嵌套列表中的唯一元组
问题描述
我有一个二维数组,其中每个元素都是一对两个标签,例如 ["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。
解决方案
您需要展平您的列表,因为与列表不同,元组是可散列的。一个简单的选项是使用itertools.chain
然后Counter
用元组列表构建一个:
from itertools import chain
Counter(chain(*pairs))
输出
Counter({('<s>', 'NOUN'): 1, ('CCONJ', 'NOUN'): 1,
('NOUN', 'SCONJ'): 1, ('SCONJ', 'NOUN'): 1})
推荐阅读
- java - 在 javafx 中使用鼠标单击创建多边形时遇到问题
- r - Creating a dataframe using declared variables
- c# - C#将每个数组元素写入表单上的不同文本框
- c# - 我想从右到左的第二个对角矩阵在矩阵对角线上做一条交叉线
- java - 当程序知道所有手牌时,如何计算扑克手牌的百分比?
- html - 在 nodejs 中使用 multer
- javascript - d3.js 热图未正确显示数据
- flutter - Should codes be written before super.initState(); or after in Flutter?
- c# - 旋转手机时更改 CollectionView 的跨度不起作用
- python - 通过 ssh 远程运行 mkdir -p 会导致不是有效的本地路径或 glob 错误