Проверьте, содержит ли список строк буквы из другого списка - PullRequest
0 голосов
/ 13 ноября 2018

Итак, у меня есть два списка:

vocabulary = ['a','b','c']
sentences = ['a a b b c c', 'a c b c', 'b c c a b']

Я хочу подсчитать, сколько раз буквы в словаре появляются в строках в списке предложений.

Итак, я хочу, чтобы вывод был:

a = 4
b = 5
c = 6

Моя программа:

counter = Counter()
for word in sentences:
    if word in vocabulary:
        counter.update(word)
print(counter)

Но я продолжаю получать вывод:

Counter()

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Counter является подклассом dict. dict.update принимает другой словарь или итерацию пар. Но вы предоставляете только один символ.

В этом случае вы можете связать список строк и перейти к Counter, а затем отфильтровать результат с помощью словарного понимания:

from collections import Counter
from itertools import chain

vocabulary = ['a','b','c']
sentences = ['a a b b c c', 'a c b c', 'b c c a b']

vocab_set = set(vocabulary)
c = Counter(chain.from_iterable(sentences))
res = {k: v for k, v in c.items() if k in vocab_set}

{'a': 4, 'b': 5, 'c': 6}
0 голосов
/ 13 ноября 2018

Решение O (n) , без import:

vocabulary = ['a', 'b', 'c']
sentences = ['a a b b c c', 'a c b c', 'b c c a b']

counts = {}
vocab_set = set(vocabulary)
for sentence in sentences:
    for ch in sentence:
        if ch in vocab_set:
            counts[ch] = counts.get(ch, 0) + 1

print(counts)

Выход

{'c': 6, 'a': 4, 'b': 5}
0 голосов
/ 13 ноября 2018

Это будет сделано, нет необходимости import:

vocabulary = ['a','b','c']
sentences = ['a a b b c c', 'a c b c', 'b c c a b']

data = ''.join(sentences)

for v in vocabulary:
    print('{}: {}'.format(v, data.count(v)))

a: 4
b: 5
c: 6
...