from functools import reduce
for n in range(1, len(fs_cat) + 1):
    for xs in itertools.combinations(fs_cat, n):
        cat = '&'.join(map(str, sorted(x['cat'] for x in xs)))
ids = sorted(reduce(operator.and_, (set(x['ids']) for x in xs)))
Трудно получить количество элементов для комбинаций списка элементов из словаря Python.