Вот решение с collections.Counter
:
>>> from collections import Counter
>>> data = [['SOME TEXT', 'COMMON_NAME1', None, 'CHOC', 'MYFR01'],
... ['SOME TEXT2', 'COMMON_NAME1', None, 'ABC', 'MYFR02'],
... ['SOME TEXT3', 'COMMON_NAME1', None, 'XYZ', 'MYFR03'],
... ['SOME TEXT4', 'COMMON_NAME2', None, 'XYZ', 'STRAWBERRY'],
... ['SOME TEXT5', 'COMMON_NAME2', None, 'XYZ', 'MYFR01'],
... ['SOME TEXT6', 'COMMON_NAME2', None, 'XYZ', 'MYFR02'],
... ['SOME TEXT7', 'COMMON_NAME2', None, 'XYZ', 'APPLE']]
>>> c = Counter(i[1] for i in data if i[-1].startswith('MYFR'))
>>> c
Counter({'COMMON_NAME1': 3, 'COMMON_NAME2': 2})
Это предполагает, что ваш целевой выбор всегда будет начинаться с MYFR
.Читая ваш вопрос немного более подробно, вы также можете использовать:
>>> tgt = {'MYFR01', 'MYFR02', 'MYFR03'}
>>> c = Counter(i[1] for i in data if i[-1] in tgt)
>>> c
Counter({'COMMON_NAME1': 3, 'COMMON_NAME2': 2})
Приятная вещь о Counter
(подкласс dict
) в том, что он может принимать генератор выражений .Это означает, что вам не нужно материализовать «отфильтрованные» элементы в некоторую промежуточную структуру данных, такую как список.