Если ваш список вложен только один раз, вы можете получить плоский список с помощью sum()
.
После этого вы можете создать пустой словарь и увеличивать значение в каждой итерации, где появляется слово. Если есть новое слово, значение по умолчанию равно нулю, и оно будет добавлено в любом случае. Скорее всего, не самое эффективное решение.
nested_lst = [[('NOUN', 'shoe'), ('NOUN', 'shirt'), ('NOUN', 'jacket')], [('VERB', 'jump')], [('NOUN', 'shoe'), ('NOUN', 'shirt'), ('ADJ', 'fancy')]]
flat_lst = sum(nested_lst, [])
dct = {}
for typ, name in flat_lst:
dct[typ] = 1 + dct.setdefault(typ, 0)
dct[name] = 1 + dct.setdefault(name, 0)
# {'NOUN': 5, 'shoe': 2, 'shirt':2, 'VERB': 1, 'jump': 1, 'jacket': 1, 'ADJ': 1, 'fancy':1}
print(dct)