Python查找并计算(字符串)列表项中的某些单词

时间:2018-07-02 15:41:33

标签: python list search count word

您好,亲爱的程序员,

我想在列表项中找到某些单词。我的输入看起来像这样:

myInputList = ['Hauses\tNN\tHaus', 'guten\tADJ\tgut', 'geht\tVFIN\tgehen'...]

我想查找并计算\ tNN \ t或\ tADJ \ t或\ tVFIN \ t。 我想计算的单词的位置总是一样,就像您在示例中看到的那样。

我尝试了以下代码,但收到以下错误:ValueError太多值无法解包(预期3)

from collections import Counter

myInputList = Counter([b for a,b,c in myInputList])
    print(myInputList)

实际上,我可以看到为什么此代码无法正常工作。但是我没有其他方法。

所以我的目标是计算\ t之间的Speach标签的​​部分。 所以最后我想说:有5个NN,4个ADJA ...

4 个答案:

答案 0 :(得分:0)

这应该做到:

a, b, c = ('\tNN\t', '\tADJ\t', '\tVFIN\t')

myInputList = ['Hauses\tNN\tHaus', 'guten\tADJ\tgut', 'geht\tVFIN\tgehen']

print(len([i for i in myInputList if any(j in i for j in [a, b, c])]))
#3

答案 1 :(得分:0)

包括“ \ t”不存在的情况

from collections import Counter
myInputList = ['Hauses\tNN\tHaus', 'guten\tADJ\tgut', 'geht\tVFIN\tgehen','xyz']
Counter([x.split('\t')[1] for x in myInputList if '\t' in x])

转换为字典

from collections import Counter
myInputList = ['Hauses\tNN\tHaus', 'guten\tADJ\tgut', 'geht\tVFIN\tgehen','xyz']
d=dict(Counter([x.split('\t')[1] for x in myInputList if '\t' in x]))
print(d['NN'])

输出:1

答案 2 :(得分:0)

myInputList = ['Hauses\tNN\tHaus', 'guten\tADJ\tgut', 'geht\tVFIN\tgehen']

newList = []
for i in myInputList:

    newList.extend(i.split("\t"))

from collections import Counter
Counter(newList)

给予

{'ADJ': 1,
 'Haus': 1,
 'Hauses': 1,
 'NN': 1,
 'VFIN': 1,
 'gehen': 1,
 'geht': 1,
 'gut': 1,
 'guten': 1}

如果需要,并且确定只需要2ND索引中的元素,则只需执行

myInputList = ['Hauses\tNN\tHaus', 'guten\tADJ\tgut', 'geht\tVFIN\tgehen']

newList = []
for i in myInputList:

    newList.append(i.split("\t"))

from collections import Counter



onlySecond = [i[1] for i in newList]
dict(Counter(onlySecond))

会给你

{'ADJ': 1, 'NN': 1, 'VFIN': 1}

答案 3 :(得分:0)

您可以使用collections.defaultdict。如果列表项中可能存在多个值,则可以删除break,否则它将在特定字符串的第一个匹配项处停止。

myInputList = ['Hauses\tNN\tHaus', 'guten\tADJ\tgut', 'geht\tVFIN\tgehen']
values = ['\tNN\t', '\tADJ\t', '\tVFIN\t']

from collections import defaultdict

d = defaultdict(int)

for item in myInputList:
    for v in values:
        if v in item:
            d[v] += 1
            break

print(d)

defaultdict(int, {'\tADJ\t': 1, '\tNN\t': 1, '\tVFIN\t': 1})