Удаление элементов списка на основе условия

У меня есть список элементов, из которых я хочу удалить те элементы, чей счет меньше или равен 2 во всем списке.

Например:

A = [['a','b','c'],['b','d'],['c','d','e'],['c','e','f'],['b','c','e','g']]

Я хочу удалить 'a', 'd', 'f', 'g' из A и сохранить остальные в B чтобы список стал:

B = [['b','c'],['b'],['c','e'],['c','e'],['b','c','e']]

Я создал словарь, который будет хранить все количество элементов и на основе этого я хочу удалить элементы со счетом меньше или равным 2.

Ниже приведен код, который я написал до сих пор.

for i in range(len(A)):
    for words in A[i]:
        word_count[words] +=1
    B = [A[i] for i in range(len(A)) if word_count[words]<2]

Ответы

Ответ 1

Вы можете использовать collections.Counter:

from collections import Counter
import itertools
A = [['a','b','c'],['b','d'],['c','d','e'],['c','e','f'],['b','c','e','g']]
c = Counter(itertools.chain(*A))
new_a = [[b for b in i if c[b] > 2] for i in A]

Выход:

[['b', 'c'], ['b'], ['c', 'e'], ['c', 'e'], ['b', 'c', 'e']]

Ответ 2

Перед тем, как добавить новый ключ в словарь, вы должны проверить, если ключ существует. Если нет, просто добавьте ключ в словарь. В противном случае обновите значение ключа.

A = [['a','b','c'],['b','d'],['c','d','e'],['c','e','f'],['b','c','e','g']]
word_count = {}
for i in range(len(A)):
  for words in A[i]:
    if words not in word_count:
      word_count[words] = 0
    word_count[words] += 1

Затем отфильтруйте исходный список, используя созданный словарь.

B = [[x for x in A[i] if word_count[x] > 2] for i in range(len(A))]
print(B)

Выход

[['b', 'c'], ['b'], ['c', 'e'], ['c', 'e'], ['b', 'c', 'e']]