Выберите n элементов для каждой группы в списке Python [закрыто]Python

Программы на Python
Anonymous
Выберите n элементов для каждой группы в списке Python [закрыто]

Сообщение Anonymous »

Предположим, что у меня есть список на Python, который может быть довольно длинным:
mylist = [{"a": 2}, {"a": 4}, {"b": 3}, {"a": 3}, ..., {"a": 5}]
У меня есть функция, которая для каждого элемента возвращает «группу» (None, когда элемент не входит в группу)
def get_group(element):
a_value = element.get("a", None)
if a_value is not None:
return "EVEN" if a_value % 2 == 0 else "ODD"
return None

Я ищу краткий, питонический и алгоритмически эффективный способ реализации этого. У меня есть первая версия ниже. Есть ли какая-либо функция или структура данных в стандартной библиотеке Python, которая помогла бы мне реализовать это более лаконично, не жертвуя сложностью алгоритма?
def get_first_n_by_group(list_, n, group_function, n_groups):
trimmed_list = list()
max_elements = n * n_groups
nb_elements_per_group = defaultdict(int)
for element in list_:
group = group_function(element)
if group is not None and nb_elements_per_group[group] < n:
trimmed_list.append(element)
nb_elements_per_group[group] += 1
if len(trimmed_list) == max_elements:
break
return trimmed_list


Подробнее здесь: https://stackoverflow.com/questions/789 ... ython-list

Вернуться в «Python»