Python 我有一张单子。我想添加一个与每个单词相关联的计数器变量。我该怎么做?
我有一个单词列表,假设是Python 我有一张单子。我想添加一个与每个单词相关联的计数器变量。我该怎么做?,python,arrays,list,Python,Arrays,List,我有一个单词列表,假设是 ['a', 'b', 'c', 'd'] 我有一个文档,我已经将一个文本文件预处理成一个矩阵,它是这样的: a,b,c,d 0,1,1,0 1,1,0,0 1,1,1,1 其中1表示句子中存在该词,0表示句子中不存在该词。我想逐行检查这个矩阵,并增加一些与上面原始单词列表相关的计数器,这样我就可以知道在最后的句子中每个单词有多少个 我怎么做这个?我必须创建关联阵列还是二维阵列?是否有一种方法可以在数组中创建一个新变量,该变量与我可以递增的每个单词关联 谢谢 您可以使
['a', 'b', 'c', 'd']
我有一个文档,我已经将一个文本文件预处理成一个矩阵,它是这样的:
a,b,c,d
0,1,1,0
1,1,0,0
1,1,1,1
其中1表示句子中存在该词,0表示句子中不存在该词。我想逐行检查这个矩阵,并增加一些与上面原始单词列表相关的计数器,这样我就可以知道在最后的句子中每个单词有多少个
我怎么做这个?我必须创建关联阵列还是二维阵列?是否有一种方法可以在数组中创建一个新变量,该变量与我可以递增的每个单词关联
谢谢 您可以使用统计字数:
>>> from collections import Counter
>>> filedata = '''\
0,1,1,0
1,1,0,0
1,1,1,1
'''
>>> counter = Counter()
>>> for line in filedata.splitlines():
a, b, c, d = map(int, line.split(','))
counter['a'] += a
counter['b'] += b
counter['c'] += c
counter['d'] += d
>>> counter
Counter({'b': 3, 'a': 2, 'c': 2, 'd': 1})
输出:
defaultdict(<type 'int'>, {'a': 2, 'c': 2, 'b': 3, 'd': 1})
Counter({'b': 3, 'a': 2, 'c': 2, 'd': 1})
输出:
defaultdict(<type 'int'>, {'a': 2, 'c': 2, 'b': 3, 'd': 1})
Counter({'b': 3, 'a': 2, 'c': 2, 'd': 1})
你所要做的就是对每一列求和,因为它只有0和1
import numpy as np
array = numpy.array((matrix))
answer = np.apply_along_axis(sum,0,array[1::])
my_dict = dict(zip(matrix[0],answer))
现在您有了一个字典,其中键是单词,值是出现的总数 我不想硬编码这些键,所以可能类似于:
import csv
from collections import Counter
with open("abcd.txt", "rb") as fp:
reader = csv.DictReader(fp)
c = Counter()
for row in reader:
c.update({k: int(v) for k,v in row.iteritems()})
产生
>>> c
Counter({'b': 3, 'a': 2, 'c': 2, 'd': 1})
如果已经描述了矩阵,可以执行以下操作:
mat=[['a','b','c','d'],
[ 0, 1, 1, 0],
[ 1, 1, 0, 0],
[ 1, 1, 1, 1]]
print {t[0]:sum(t[1:]) for t in zip(*mat)}
印刷品:
{'a': 2, 'c': 2, 'b': 3, 'd': 1}
当然Numpy很棒,如果你在处理矩阵,它就是一个模块!很高兴我能帮上忙,我发现这有点令人惊讶。这使它看起来像是
matrix[0]
有键,在这种情况下,answer=
行应该失败。你真的试过这个吗?很好!我进行了编辑,因此第一行不计入总和。谢谢,很好。请注意,在2.7/3.1之前的Python上,您需要对zip(*mat)中的t执行dict([(t[0],sum(t[1:])))
,因为没有dict理解。